The attodo.app, uhh... app.
at main 38 lines 1.0 kB view raw
1package middleware 2 3import ( 4 "context" 5 "log" 6 "net/http" 7 8 "github.com/shindakun/attodo/internal/handlers" 9 "github.com/shindakun/attodo/internal/session" 10) 11 12type AuthMiddleware struct { 13 authHandler *handlers.AuthHandler 14} 15 16func NewAuthMiddleware(authHandler *handlers.AuthHandler) *AuthMiddleware { 17 return &AuthMiddleware{authHandler: authHandler} 18} 19 20// RequireAuth ensures user is authenticated 21func (m *AuthMiddleware) RequireAuth(next http.Handler) http.Handler { 22 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 23 log.Printf("Middleware: Checking auth for %s", r.URL.Path) 24 25 sess, err := m.authHandler.GetSession(r) 26 if err != nil { 27 log.Printf("Middleware: Auth failed, redirecting to /login: %v", err) 28 http.Redirect(w, r, "/login", http.StatusSeeOther) 29 return 30 } 31 32 log.Printf("Middleware: Auth successful for DID: %s", sess.DID) 33 34 // Add session to context 35 ctx := context.WithValue(r.Context(), session.SessionKey, sess) 36 next.ServeHTTP(w, r.WithContext(ctx)) 37 }) 38}