package middleware import ( "api/src/utils" "context" "log" "net/http" ) type ContextKey string const TOKEN_KEY ContextKey = "token" func EnsureAuth(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { tokenStr := r.Header.Get("Authorization") if (tokenStr == "") || (len(tokenStr) < len("Bearer ")) { http.Error(w, "Unauthorized", http.StatusUnauthorized) return } tokenStr = tokenStr[len("Bearer "):] token, err := utils.VerifyToken(tokenStr) if err != nil { log.Println(err) http.Error(w, "Unauthorized", http.StatusUnauthorized) return } var newContext = context.WithValue(r.Context(), TOKEN_KEY, token) next.ServeHTTP(w, r.WithContext(newContext)) }) }