Files
backrest/internal/auth/middleware.go
2024-02-01 01:19:16 -08:00

37 lines
856 B
Go

package auth
import (
"context"
"net/http"
"go.uber.org/zap"
)
type contextKey string
func (k contextKey) String() string {
return "auth context value " + string(k)
}
const UserContextKey contextKey = "user"
func RequireAuthentication(h http.Handler, auth *Authenticator) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
token, err := ParseBearerToken(r.Header.Get("Authorization"))
if err != nil {
http.Error(w, "Unauthorized (No Authorization Header)", http.StatusUnauthorized)
return
}
user, err := auth.VerifyJWT(token)
if err != nil {
zap.S().Warnf("auth middleware blocked bad JWT: %v", err)
http.Error(w, "Unauthorized (Bad Token)", http.StatusUnauthorized)
return
}
ctx := context.WithValue(r.Context(), UserContextKey, user)
h.ServeHTTP(w, r.WithContext(ctx))
})
}