tangled
alpha
login
or
join now
margin.at
/
margin
87
fork
atom
Write on the margins of the internet. Powered by the AT Protocol.
margin.at
extension
web
atproto
comments
87
fork
atom
overview
issues
4
pulls
1
pipelines
Implement a privacy logger
scanash.com
1 month ago
f1d82d3e
ed69b9e6
+48
-1
2 changed files
expand all
collapse all
unified
split
backend
cmd
server
main.go
internal
middleware
logger.go
+2
-1
backend/cmd/server/main.go
···
19
19
"margin.at/internal/api"
20
20
"margin.at/internal/db"
21
21
"margin.at/internal/firehose"
22
22
+
internalMiddleware "margin.at/internal/middleware"
22
23
"margin.at/internal/oauth"
23
24
"margin.at/internal/sync"
24
25
)
···
55
56
56
57
r := chi.NewRouter()
57
58
58
58
-
r.Use(middleware.Logger)
59
59
+
r.Use(internalMiddleware.PrivacyLogger)
59
60
r.Use(middleware.Recoverer)
60
61
r.Use(middleware.RequestID)
61
62
r.Use(middleware.RealIP)
+46
backend/internal/middleware/logger.go
···
1
1
+
package middleware
2
2
+
3
3
+
import (
4
4
+
"log"
5
5
+
"net/http"
6
6
+
"net/url"
7
7
+
"time"
8
8
+
9
9
+
"github.com/go-chi/chi/v5/middleware"
10
10
+
)
11
11
+
12
12
+
func PrivacyLogger(next http.Handler) http.Handler {
13
13
+
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
14
14
+
ww := middleware.NewWrapResponseWriter(w, r.ProtoMajor)
15
15
+
t1 := time.Now()
16
16
+
17
17
+
defer func() {
18
18
+
safeURL := redactURL(r.URL)
19
19
+
20
20
+
log.Printf("[%d] %s %s %s",
21
21
+
ww.Status(),
22
22
+
r.Method,
23
23
+
safeURL,
24
24
+
time.Since(t1),
25
25
+
)
26
26
+
}()
27
27
+
28
28
+
next.ServeHTTP(ww, r)
29
29
+
})
30
30
+
}
31
31
+
32
32
+
func redactURL(u *url.URL) string {
33
33
+
redacted := *u
34
34
+
q := redacted.Query()
35
35
+
36
36
+
sensitiveKeys := []string{"source", "url", "target", "parent", "root", "uri"}
37
37
+
38
38
+
for _, key := range sensitiveKeys {
39
39
+
if q.Has(key) {
40
40
+
q.Set(key, "[REDACTED]")
41
41
+
}
42
42
+
}
43
43
+
44
44
+
redacted.RawQuery = q.Encode()
45
45
+
return redacted.String()
46
46
+
}