Files
abuse-registration-api-golang/internal/middlewares/authenticate.go
T

44 lines
1.1 KiB
Go

package middlewares
import (
"context"
"net/http"
"strings"
"abuse_registration_poc/internal/handlers"
"abuse_registration_poc/internal/utils"
)
type contextKey string
const (
RoleContextKey contextKey = "role"
UserIDContextKey contextKey = "userId"
)
func Authenticate(next http.Handler) http.Handler {
return http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
token := strings.TrimSpace(request.Header.Get("Authorization"))
if token == "" {
handlers.WriteJSON(writer, http.StatusUnauthorized, map[string]string{"message": "Not authorized."})
return
}
token = strings.TrimPrefix(token, "Bearer ")
userID, role, err := utils.VerifyToken(token)
if err != nil {
handlers.WriteJSON(writer, http.StatusUnauthorized, map[string]string{"message": "Not authorized."})
return
}
ctx := context.WithValue(request.Context(), RoleContextKey, role)
ctx = context.WithValue(ctx, UserIDContextKey, userID)
next.ServeHTTP(writer, request.WithContext(ctx))
})
}
func RoleFromContext(ctx context.Context) (string, bool) {
role, ok := ctx.Value(RoleContextKey).(string)
return role, ok
}