diff --git a/internal/auth/oidc.go b/internal/auth/oidc.go index 6352e898..ea45f443 100644 --- a/internal/auth/oidc.go +++ b/internal/auth/oidc.go @@ -251,7 +251,7 @@ func (auth *OIDCProvider) LoginHandler(w http.ResponseWriter, r *http.Request) { } if !rateLimit.Allow() { - http.Error(w, "auth rate limit exceeded", http.StatusTooManyRequests) + WriteBlockPage(w, http.StatusTooManyRequests, "auth rate limit exceeded", "Try again", OIDCAuthInitPath) return } @@ -318,34 +318,39 @@ func (auth *OIDCProvider) PostAuthCallbackHandler(w http.ResponseWriter, r *http // verify state state, err := r.Cookie(auth.getAppScopedCookieName(CookieOauthState)) if err != nil { - http.Error(w, "missing state cookie", http.StatusBadRequest) + auth.clearCookie(w, r) + WriteBlockPage(w, http.StatusBadRequest, "missing state cookie", "Back to Login", OIDCAuthInitPath) return } if r.URL.Query().Get("state") != state.Value { - http.Error(w, "invalid oauth state", http.StatusBadRequest) + auth.clearCookie(w, r) + WriteBlockPage(w, http.StatusBadRequest, "invalid oauth state", "Back to Login", OIDCAuthInitPath) return } code := r.URL.Query().Get("code") oauth2Token, err := auth.oauthConfig.Exchange(r.Context(), code, optRedirectPostAuth(r)) if err != nil { - http.Error(w, "Internal Server Error", http.StatusInternalServerError) - httputils.LogError(r).Msg(fmt.Sprintf("failed to exchange token: %v", err)) + auth.clearCookie(w, r) + WriteBlockPage(w, http.StatusInternalServerError, "failed to exchange token", "Try again", OIDCAuthInitPath) + httputils.LogError(r).Msgf("failed to exchange token: %v", err) return } idTokenJWT, idToken, err := auth.getIDToken(r.Context(), oauth2Token) if err != nil { - http.Error(w, "Internal Server Error", http.StatusInternalServerError) - httputils.LogError(r).Msg(fmt.Sprintf("failed to get ID token: %v", err)) + auth.clearCookie(w, r) + WriteBlockPage(w, http.StatusInternalServerError, "failed to get ID token", "Try again", OIDCAuthInitPath) + httputils.LogError(r).Msgf("failed to get ID token: %v", err) return } if oauth2Token.RefreshToken != "" { claims, err := parseClaims(idToken) if err != nil { - http.Error(w, "Internal Server Error", http.StatusInternalServerError) - httputils.LogError(r).Msg(fmt.Sprintf("failed to parse claims: %v", err)) + auth.clearCookie(w, r) + WriteBlockPage(w, http.StatusInternalServerError, "failed to parse claims", "Try again", OIDCAuthInitPath) + httputils.LogError(r).Msgf("failed to parse claims: %v", err) return } session := newSession(claims.Username, claims.Groups)