package auth import ( "context" "net/http" ) const CookieName = "nexarch_session" type contextKey int const claimsContextKey contextKey = iota // RequireAuth schuetzt eine Route: ohne gueltiges, nicht abgelaufenes Token // im Session-Cookie wird 401 zurueckgegeben und der Handler nicht aufgerufen // (IAM-02 Akzeptanzkriterium 3). func RequireAuth(issuer *TokenIssuer, next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { cookie, err := r.Cookie(CookieName) if err != nil { http.Error(w, "nicht angemeldet", http.StatusUnauthorized) return } claims, err := issuer.Verify(cookie.Value) if err != nil { http.Error(w, "nicht angemeldet", http.StatusUnauthorized) return } ctx := context.WithValue(r.Context(), claimsContextKey, claims) next(w, r.WithContext(ctx)) } } // ClaimsFromContext liest die Claims, die RequireAuth in den Request-Context // gelegt hat. func ClaimsFromContext(ctx context.Context) (*Claims, bool) { c, ok := ctx.Value(claimsContextKey).(*Claims) return c, ok }