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
"margin.at/internal/api"
20
"margin.at/internal/db"
21
"margin.at/internal/firehose"
0
22
"margin.at/internal/oauth"
23
"margin.at/internal/sync"
24
)
···
55
56
r := chi.NewRouter()
57
58
-
r.Use(middleware.Logger)
59
r.Use(middleware.Recoverer)
60
r.Use(middleware.RequestID)
61
r.Use(middleware.RealIP)
···
19
"margin.at/internal/api"
20
"margin.at/internal/db"
21
"margin.at/internal/firehose"
22
+
internalMiddleware "margin.at/internal/middleware"
23
"margin.at/internal/oauth"
24
"margin.at/internal/sync"
25
)
···
56
57
r := chi.NewRouter()
58
59
+
r.Use(internalMiddleware.PrivacyLogger)
60
r.Use(middleware.Recoverer)
61
r.Use(middleware.RequestID)
62
r.Use(middleware.RealIP)
+46
backend/internal/middleware/logger.go
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
package middleware
2
+
3
+
import (
4
+
"log"
5
+
"net/http"
6
+
"net/url"
7
+
"time"
8
+
9
+
"github.com/go-chi/chi/v5/middleware"
10
+
)
11
+
12
+
func PrivacyLogger(next http.Handler) http.Handler {
13
+
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
14
+
ww := middleware.NewWrapResponseWriter(w, r.ProtoMajor)
15
+
t1 := time.Now()
16
+
17
+
defer func() {
18
+
safeURL := redactURL(r.URL)
19
+
20
+
log.Printf("[%d] %s %s %s",
21
+
ww.Status(),
22
+
r.Method,
23
+
safeURL,
24
+
time.Since(t1),
25
+
)
26
+
}()
27
+
28
+
next.ServeHTTP(ww, r)
29
+
})
30
+
}
31
+
32
+
func redactURL(u *url.URL) string {
33
+
redacted := *u
34
+
q := redacted.Query()
35
+
36
+
sensitiveKeys := []string{"source", "url", "target", "parent", "root", "uri"}
37
+
38
+
for _, key := range sensitiveKeys {
39
+
if q.Has(key) {
40
+
q.Set(key, "[REDACTED]")
41
+
}
42
+
}
43
+
44
+
redacted.RawQuery = q.Encode()
45
+
return redacted.String()
46
+
}