The attodo.app, uhh... app.
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}