summaryrefslogtreecommitdiffstats
path: root/routers/routes
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2021-01-28 01:46:35 +0800
committerGitHub <noreply@github.com>2021-01-27 18:46:35 +0100
commita51cc6dea41b154b946e982fde6cc1a600210a71 (patch)
tree07e9f38a2f3572bb8ed9a666d33dd30e976bd5e6 /routers/routes
parent4c6e0295069a3c2f0df3d9f30560906bc2aa73a8 (diff)
downloadgitea-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.go53
-rw-r--r--routers/routes/web.go8
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) {