aboutsummaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-rw-r--r--internal/headers.go20
-rw-r--r--internal/slog.go24
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))
+}