aboutsummaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
Diffstat (limited to 'backend')
-rw-r--r--backend/admin.go5
-rw-r--r--backend/data.go4
-rw-r--r--backend/log/logger.go (renamed from backend/logger.go)12
-rw-r--r--backend/router.go16
-rw-r--r--backend/section.go3
-rw-r--r--backend/storage/stats.go5
6 files changed, 30 insertions, 15 deletions
diff --git a/backend/admin.go b/backend/admin.go
index 6fc61eb..89cc849 100644
--- a/backend/admin.go
+++ b/backend/admin.go
@@ -8,6 +8,7 @@ import (
"sync"
"time"
+ "git.anhgelus.world/anhgelus/small-web/backend/log"
"git.anhgelus.world/anhgelus/small-web/backend/storage"
"github.com/go-chi/chi/v5"
)
@@ -68,7 +69,7 @@ func rateLimit(ctx context.Context) bool {
return false
}
v.since = time.Now()
- GetLogger(ctx).Warn("rate limiting IP", "ip", ip, "duration", rateLimitDuration(v.n).String())
+ log.GetLogger(ctx).Warn("rate limiting IP", "ip", ip, "duration", rateLimitDuration(v.n).String())
go func(v *to, ip string) {
time.Sleep(3 * time.Hour)
v.n = max(v.n-4, 0)
@@ -106,7 +107,7 @@ func HandleAdmin(r *chi.Mux) {
if rawPage != "" {
page, err = strconv.Atoi(rawPage)
if err != nil || page < 1 {
- GetLogger(ctx).Warn("invalid page number", "requested", rawPage)
+ log.GetLogger(ctx).Warn("invalid page number", "requested", rawPage)
http.Error(w, "Bad request", http.StatusBadRequest)
return
}
diff --git a/backend/data.go b/backend/data.go
index f7ba3b1..4f9bab1 100644
--- a/backend/data.go
+++ b/backend/data.go
@@ -13,6 +13,8 @@ import (
"regexp"
"strings"
txt "text/template"
+
+ "git.anhgelus.world/anhgelus/small-web/backend/log"
)
var (
@@ -175,7 +177,7 @@ func getAsset(ctx context.Context, path string) *assetData {
return asset
}
asset = &assetData{}
- logger := GetLogger(ctx)
+ logger := log.GetLogger(ctx)
var b []byte
if regexIsHttp.MatchString(path) {
asset.Src = path
diff --git a/backend/logger.go b/backend/log/logger.go
index f3dbc3c..feb79fc 100644
--- a/backend/logger.go
+++ b/backend/log/logger.go
@@ -1,4 +1,4 @@
-package backend
+package log
import (
"context"
@@ -35,10 +35,18 @@ func GetStatusCode(ctx context.Context) func() int {
return ctx.Value(statusCode).(func() int)
}
+func newLogger(l *slog.Logger, r *http.Request) *slog.Logger {
+ return l.With("uri", r.RequestURI, "method", r.Method)
+}
+
+func SetContextLogger(ctx context.Context, l *slog.Logger, r *http.Request) context.Context {
+ return context.WithValue(ctx, loggerKey, newLogger(l, r))
+}
+
func SetLogger(l *slog.Logger) func(http.Handler) http.Handler {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- logger := l.With("uri", r.RequestURI, "method", r.Method)
+ logger := newLogger(l, r)
ww := &customWriter{ResponseWriter: w, statusCode: http.StatusOK}
ctx := context.WithValue(r.Context(), statusCode, func() int {
return ww.statusCode
diff --git a/backend/router.go b/backend/router.go
index 6143a3f..433052b 100644
--- a/backend/router.go
+++ b/backend/router.go
@@ -16,6 +16,7 @@ import (
"strings"
"time"
+ "git.anhgelus.world/anhgelus/small-web/backend/log"
"git.anhgelus.world/anhgelus/small-web/backend/storage"
"github.com/go-chi/chi/v5"
"github.com/go-chi/chi/v5/middleware"
@@ -50,7 +51,7 @@ func NewRouter(debug bool, cfg *Config, db *sql.DB, assets fs.FS) *chi.Mux {
r := chi.NewRouter()
r.Use(middleware.Timeout(30 * time.Second))
- r.Use(SetLogger(slog.Default()))
+ r.Use(log.SetLogger(slog.Default()))
// security headers
r.Use(func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
@@ -86,6 +87,7 @@ func NewRouter(debug bool, cfg *Config, db *sql.DB, assets fs.FS) *chi.Mux {
ctx = context.WithValue(ctx, configKey, cfg)
ctx = context.WithValue(ctx, assetsFSKey, assets)
ctx = context.WithValue(ctx, debugKey, debug)
+ ctx = log.SetContextLogger(ctx, slog.Default(), r)
return context.WithValue(ctx, storage.DBKey, db)
}
r.Use(func(next http.Handler) http.Handler {
@@ -134,13 +136,13 @@ func NewRouter(debug bool, cfg *Config, db *sql.DB, assets fs.FS) *chi.Mux {
if strings.HasPrefix(r.RequestURI, "/static") || r.RequestURI == "/robots.txt" {
return
}
- logger := GetLogger(ctx)
+ logger := log.GetLogger(ctx)
debug := ctx.Value(debugKey).(bool)
if ctx.Value(loginKey).(bool) && !debug {
logger.Debug("not updating stats because user is admin logged")
return
}
- statusCode := GetStatusCode(ctx)()
+ statusCode := log.GetStatusCode(ctx)()
if statusCode >= 299 && r.RequestURI != storage.HumanPageLoad {
logger.Debug("not updating stats for status code above 299", "status", statusCode)
return
@@ -155,9 +157,9 @@ func NewRouter(debug bool, cfg *Config, db *sql.DB, assets fs.FS) *chi.Mux {
})
})
// anti dumb attackers bot
- phpUri := regexp.MustCompile(`/.+\.php(/.*)?`)
- dotUri := regexp.MustCompile(`/(.*/)*\..*`)
r.Use(func(next http.Handler) http.Handler {
+ phpUri := regexp.MustCompile(`/.+\.php(/.*)?`)
+ dotUri := regexp.MustCompile(`/(.*/)*\..*`)
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if phpUri.MatchString(r.RequestURI) || dotUri.MatchString(r.RequestURI) {
handleSus(w, r)
@@ -171,7 +173,7 @@ func NewRouter(debug bool, cfg *Config, db *sql.DB, assets fs.FS) *chi.Mux {
r.Get("/{file:[a-z]+}.txt", func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
cfg := ctx.Value(configKey).(*Config)
- logger := GetLogger(ctx)
+ logger := log.GetLogger(ctx)
logger.Info("requesting txt file", "User-Agent", r.Header.Get("User-Agent"))
b, err := os.ReadFile(path.Join(cfg.PublicFolder, chi.URLParam(r, "file")+".txt"))
if os.IsNotExist(err) {
@@ -191,7 +193,7 @@ func NewRouter(debug bool, cfg *Config, db *sql.DB, assets fs.FS) *chi.Mux {
func handleSus(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
- logger := GetLogger(ctx)
+ logger := log.GetLogger(ctx)
logger.Warn("sus request", "User-Agent", r.Header.Get("User-Agent"))
if rateLimit(ctx) {
http.Error(w, "Too many requests", http.StatusTooManyRequests)
diff --git a/backend/section.go b/backend/section.go
index 2e0c520..9d49ea2 100644
--- a/backend/section.go
+++ b/backend/section.go
@@ -15,6 +15,7 @@ import (
"sync"
"time"
+ "git.anhgelus.world/anhgelus/small-web/backend/log"
"github.com/go-chi/chi/v5"
)
@@ -270,7 +271,7 @@ func (s *Section) handlePagination(w http.ResponseWriter, r *http.Request, maxLo
var err error
page, err = strconv.Atoi(rawPage)
if err != nil || page < 1 {
- GetLogger(r.Context()).Warn("invalid page number", "requested", rawPage)
+ log.GetLogger(r.Context()).Warn("invalid page number", "requested", rawPage)
http.Error(w, "Bad request", http.StatusBadRequest)
return nil
}
diff --git a/backend/storage/stats.go b/backend/storage/stats.go
index cdbee75..6bc9958 100644
--- a/backend/storage/stats.go
+++ b/backend/storage/stats.go
@@ -3,13 +3,14 @@ package storage
import (
"context"
"fmt"
- "log/slog"
"net/http"
"net/url"
"slices"
"strings"
"sync"
"time"
+
+ "git.anhgelus.world/anhgelus/small-web/backend/log"
)
const IPAddressKey = "ip_address"
@@ -120,7 +121,7 @@ func humanLoad(ctx context.Context, r *http.Request, domain string) error {
}
defer func() {
if err == nil {
- slog.Debug("stats updated")
+ log.GetLogger(ctx).Debug("stats updated")
load.Remove(ip, lr.target)
}
}()