diff options
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/headers.go | 20 | ||||
| -rw-r--r-- | internal/slog.go | 24 |
2 files changed, 44 insertions, 0 deletions
diff --git a/internal/headers.go b/internal/headers.go new file mode 100644 index 0000000..47aa2cc --- /dev/null +++ b/internal/headers.go @@ -0,0 +1,20 @@ +package internal + +import ( + "net/http" + + "github.com/TecharoHQ/anubis" +) + +// UnchangingCache sets the Cache-Control header to cache a response for 1 year if +// and only if the application is compiled in "release" mode by Docker. +func UnchangingCache(h http.Handler) http.Handler { + if anubis.Version == "devel" { + return h + } + + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Cache-Control", "public, max-age=31536000") + h.ServeHTTP(w, r) + }) +} diff --git a/internal/slog.go b/internal/slog.go new file mode 100644 index 0000000..115e1d2 --- /dev/null +++ b/internal/slog.go @@ -0,0 +1,24 @@ +package internal + +import ( + "fmt" + "log/slog" + "os" +) + +func InitSlog(level string) { + var programLevel slog.Level + if err := (&programLevel).UnmarshalText([]byte(level)); err != nil { + fmt.Fprintf(os.Stderr, "invalid log level %s: %v, using info\n", level, err) + programLevel = slog.LevelInfo + } + + leveler := &slog.LevelVar{} + leveler.Set(programLevel) + + h := slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{ + AddSource: true, + Level: leveler, + }) + slog.SetDefault(slog.New(h)) +} |
