feat(middleware): use slogger #19

merged
opened by brookjeynes.dev targeting master from push-trrpxxyxxmot
Changed files
+15 -6
internal
server
handlers
middleware
+2
internal/server/handlers/router.go
···
"github.com/go-chi/chi/v5"
"yoten.app/internal/server"
"yoten.app/internal/server/middleware"
"yoten.app/internal/server/views"
)
···
h.Oauth,
h.Db,
h.IdResolver,
)
router.HandleFunc("/*", func(w http.ResponseWriter, r *http.Request) {
···
"github.com/go-chi/chi/v5"
"yoten.app/internal/server"
+
"yoten.app/internal/server/log"
"yoten.app/internal/server/middleware"
"yoten.app/internal/server/views"
)
···
h.Oauth,
h.Db,
h.IdResolver,
+
log.SubLogger(h.Logger, "middleware"),
)
router.HandleFunc("/*", func(w http.ResponseWriter, r *http.Request) {
+13 -6
internal/server/middleware/middleware.go
···
import (
"context"
"fmt"
-
"log"
"net/http"
"net/url"
"slices"
···
oauth *oauth.OAuth
db *db.DB
idResolver *atproto.Resolver
}
-
func New(oauth *oauth.OAuth, db *db.DB, idResolver *atproto.Resolver) Middleware {
return Middleware{
oauth: oauth,
db: db,
idResolver: idResolver,
}
}
type middlewareFunc func(http.Handler) http.Handler
func AuthMiddleware(o *oauth.OAuth) middlewareFunc {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
returnURL := "/"
···
sess, err := o.ResumeSession(r)
if err != nil {
-
log.Println("failed to resume session, redirecting...", "err", err, "url", r.URL.String())
redirectFunc(w, r)
return
}
if sess == nil {
-
log.Printf("session is nil, redirecting...")
redirectFunc(w, r)
return
}
···
}
func (mw Middleware) ResolveIdent() middlewareFunc {
excluded := []string{"favicon.ico"}
return func(next http.Handler) http.Handler {
···
id, err := mw.idResolver.ResolveIdent(r.Context(), didOrHandle)
if err != nil {
-
log.Println("failed to resolve did/handle:", err)
w.WriteHeader(http.StatusNotFound)
views.NotFoundPage(views.NotFoundPageParams{}).Render(r.Context(), w)
return
···
}
func (mw Middleware) LoadUnreadNotificationCount() middlewareFunc {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
user := mw.oauth.GetUser(r)
···
count, err := db.GetUnreadNotificationCount(mw.db, user.Did)
if err != nil {
-
log.Println("failed to get notification count:", err)
}
ctx := context.WithValue(r.Context(), UnreadNotificationCountCtxKey, count)
···
import (
"context"
"fmt"
+
"log/slog"
"net/http"
"net/url"
"slices"
···
oauth *oauth.OAuth
db *db.DB
idResolver *atproto.Resolver
+
logger *slog.Logger
}
+
func New(oauth *oauth.OAuth, db *db.DB, idResolver *atproto.Resolver, logger *slog.Logger) Middleware {
return Middleware{
oauth: oauth,
db: db,
idResolver: idResolver,
+
logger: logger,
}
}
type middlewareFunc func(http.Handler) http.Handler
func AuthMiddleware(o *oauth.OAuth) middlewareFunc {
+
l := o.Logger.With("middleware", "AuthMiddleware")
+
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
returnURL := "/"
···
sess, err := o.ResumeSession(r)
if err != nil {
+
l.Error("failed to resume session, redirecting...", "err", err, "url", r.URL.String())
redirectFunc(w, r)
return
}
if sess == nil {
+
l.Warn("session is nil, redirecting...")
redirectFunc(w, r)
return
}
···
}
func (mw Middleware) ResolveIdent() middlewareFunc {
+
l := mw.logger.With("middleware", "ResolveIdent")
excluded := []string{"favicon.ico"}
return func(next http.Handler) http.Handler {
···
id, err := mw.idResolver.ResolveIdent(r.Context(), didOrHandle)
if err != nil {
+
l.Error("failed to resolve did/handle", "err", err)
w.WriteHeader(http.StatusNotFound)
views.NotFoundPage(views.NotFoundPageParams{}).Render(r.Context(), w)
return
···
}
func (mw Middleware) LoadUnreadNotificationCount() middlewareFunc {
+
l := mw.logger.With("middleware", "LoadUnreadNotificationCount")
+
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
user := mw.oauth.GetUser(r)
···
count, err := db.GetUnreadNotificationCount(mw.db, user.Did)
if err != nil {
+
l.Error("failed to get notification count", "err", err)
}
ctx := context.WithValue(r.Context(), UnreadNotificationCountCtxKey, count)