simplify logger middleware

This commit is contained in:
Umputun
2018-05-18 12:25:39 -05:00
parent 246736d44d
commit fdd0290fe7
2 changed files with 45 additions and 45 deletions
+43 -43
View File
@@ -87,58 +87,17 @@ var reMultWhtsp = regexp.MustCompile(`[\s\p{Zs}]{2,}`)
// Logger middleware prints http log. Customized by set of LoggerFlag
func Logger(flags ...LoggerFlag) func(http.Handler) http.Handler {
inFlags := func(f LoggerFlag) bool {
for _, flg := range flags {
if (flg == LogAll && f != LogNone) || flg == f {
return true
}
}
return false
}
f := func(h http.Handler) http.Handler {
fn := func(w http.ResponseWriter, r *http.Request) {
if inFlags(LogNone) { // skip logging
if inLogFlags(LogNone, flags) { // skip logging
h.ServeHTTP(w, r)
return
}
ww := middleware.NewWrapResponseWriter(w, 1)
body, user := func() (body string, user string) {
ctx := r.Context()
if ctx == nil {
return "", ""
}
if inFlags(LogBody) {
if content, err := ioutil.ReadAll(r.Body); err == nil {
body = string(content)
r.Body = ioutil.NopCloser(bytes.NewReader(content))
if len(body) > 0 {
body = strings.Replace(body, "\n", " ", -1)
body = reMultWhtsp.ReplaceAllString(body, " ")
}
if len(body) > maxBody {
body = body[:maxBody] + "..."
}
}
}
if inFlags(LogUser) {
u, err := rest.GetUserInfo(r)
if err == nil && u.Name != "" {
user = fmt.Sprintf(" - %s %q", u.ID, u.Name)
}
}
return body, user
}()
body, user := getBodyAndUser(r, flags)
t1 := time.Now()
defer func() {
t2 := time.Now()
@@ -164,3 +123,44 @@ func Logger(flags ...LoggerFlag) func(http.Handler) http.Handler {
return f
}
func getBodyAndUser(r *http.Request, flags []LoggerFlag) (body string, user string) {
ctx := r.Context()
if ctx == nil {
return "", ""
}
if inLogFlags(LogBody, flags) {
if content, err := ioutil.ReadAll(r.Body); err == nil {
body = string(content)
r.Body = ioutil.NopCloser(bytes.NewReader(content))
if len(body) > 0 {
body = strings.Replace(body, "\n", " ", -1)
body = reMultWhtsp.ReplaceAllString(body, " ")
}
if len(body) > maxBody {
body = body[:maxBody] + "..."
}
}
}
if inLogFlags(LogUser, flags) {
u, err := rest.GetUserInfo(r)
if err == nil && u.Name != "" {
user = fmt.Sprintf(" - %s %q", u.ID, u.Name)
}
}
return body, user
}
func inLogFlags(f LoggerFlag, flags []LoggerFlag) bool {
for _, flg := range flags {
if (flg == LogAll && f != LogNone) || flg == f {
return true
}
}
return false
}
+2 -2
View File
@@ -61,7 +61,7 @@ func (a *Authenticator) Auth(reqAuth bool) func(http.Handler) http.Handler {
return
}
if xsrfError := a.checkXsrf(r, session); xsrfError != nil {
if xsrfError := a.checkXSRF(r, session); xsrfError != nil {
if reqAuth {
log.Printf("[WARN] %s", xsrfError.Error())
http.Error(w, "Unauthorized", http.StatusUnauthorized)
@@ -89,7 +89,7 @@ func (a *Authenticator) Auth(reqAuth bool) func(http.Handler) http.Handler {
return f
}
func (a *Authenticator) checkXsrf(r *http.Request, session *sessions.Session) error {
func (a *Authenticator) checkXSRF(r *http.Request, session *sessions.Session) error {
xsrfToken := r.Header.Get("X-XSRF-TOKEN")
sessionToken, headerOk := session.Values["xsrf_token"]
if !headerOk || xsrfToken == "" || sessionToken == nil {