diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2021-01-28 01:46:35 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-27 18:46:35 +0100 |
commit | a51cc6dea41b154b946e982fde6cc1a600210a71 (patch) | |
tree | 07e9f38a2f3572bb8ed9a666d33dd30e976bd5e6 /routers/routes | |
parent | 4c6e0295069a3c2f0df3d9f30560906bc2aa73a8 (diff) | |
download | gitea-a51cc6dea41b154b946e982fde6cc1a600210a71.tar.gz gitea-a51cc6dea41b154b946e982fde6cc1a600210a71.zip |
Fix access log (#14475)
Fix #14121, #14478.
The `AccessLog` middleware has to be after `Contexter` or `APIContexter` so that we can get `LoginUserName` if possible.
And also there is a **BREAK** change that it removed internal API access log.
Diffstat (limited to 'routers/routes')
-rw-r--r-- | routers/routes/base.go | 53 | ||||
-rw-r--r-- | routers/routes/web.go | 8 |
2 files changed, 4 insertions, 57 deletions
diff --git a/routers/routes/base.go b/routers/routes/base.go index a313032a88..4efb7f01d5 100644 --- a/routers/routes/base.go +++ b/routers/routes/base.go @@ -5,7 +5,6 @@ package routes import ( - "bytes" "errors" "fmt" "io" @@ -13,7 +12,6 @@ import ( "os" "path" "strings" - "text/template" "time" "code.gitea.io/gitea/modules/auth/sso" @@ -28,57 +26,6 @@ import ( "gitea.com/go-chi/session" ) -type routerLoggerOptions struct { - req *http.Request - Identity *string - Start *time.Time - ResponseWriter http.ResponseWriter -} - -// SignedUserName returns signed user's name via context -func SignedUserName(req *http.Request) string { - ctx := context.GetContext(req) - if ctx != nil { - v := ctx.Data["SignedUserName"] - if res, ok := v.(string); ok { - return res - } - } - return "" -} - -func accessLogger() func(http.Handler) http.Handler { - logger := log.GetLogger("access") - logTemplate, _ := template.New("log").Parse(setting.AccessLogTemplate) - return func(next http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - start := time.Now() - next.ServeHTTP(w, req) - identity := "-" - if val := SignedUserName(req); val != "" { - identity = val - } - rw := w - - buf := bytes.NewBuffer([]byte{}) - err := logTemplate.Execute(buf, routerLoggerOptions{ - req: req, - Identity: &identity, - Start: &start, - ResponseWriter: rw, - }) - if err != nil { - log.Error("Could not set up chi access logger: %v", err.Error()) - } - - err = logger.SendLog(log.INFO, "", "", 0, buf.String(), "") - if err != nil { - log.Error("Could not set up chi access logger: %v", err.Error()) - } - }) - } -} - // LoggerHandler is a handler that will log the routing to the default gitea log func LoggerHandler(level log.Level) func(next http.Handler) http.Handler { return func(next http.Handler) http.Handler { diff --git a/routers/routes/web.go b/routers/routes/web.go index cbd7c0b7ca..3fecb4dbbe 100644 --- a/routers/routes/web.go +++ b/routers/routes/web.go @@ -88,10 +88,6 @@ func commonMiddlewares() []func(http.Handler) http.Handler { next.ServeHTTP(resp, req) }) }) - - if setting.EnableAccessLog { - handlers = append(handlers, accessLogger()) - } return handlers } @@ -168,6 +164,10 @@ func WebRoutes() *web.Route { r.Use(context.Contexter()) // Removed: SetAutoHead allow a get request redirect to head if get method is not exist + if setting.EnableAccessLog { + r.Use(context.AccessLogger()) + } + r.Use(user.GetNotificationCount) r.Use(repo.GetActiveStopwatch) r.Use(func(ctx *context.Context) { |