only remove invalid session cookie if it's invalid/expired/missing

This commit is contained in:
jguer
2022-11-30 16:33:09 +01:00
parent 29c141d4c3
commit 270a893e12
2 changed files with 19 additions and 6 deletions
+13 -3
View File
@@ -3,6 +3,7 @@ package models
import (
"context"
"errors"
"fmt"
"net"
"github.com/grafana/grafana/pkg/registry"
@@ -11,7 +12,8 @@ import (
// Typed errors
var (
ErrUserTokenNotFound = errors.New("user token not found")
ErrUserTokenNotFound = errors.New("user token not found")
ErrInvalidSessionToken = errors.New("invalid session token")
)
// CreateTokenErr represents a token creation error; used in Enterprise
@@ -33,7 +35,11 @@ type TokenExpiredError struct {
TokenID int64
}
func (e *TokenExpiredError) Error() string { return "user token expired" }
func (e *TokenExpiredError) Unwrap() error { return ErrInvalidSessionToken }
func (e *TokenExpiredError) Error() string {
return fmt.Sprintf("%s: user token expired", ErrInvalidSessionToken)
}
type TokenRevokedError struct {
UserID int64
@@ -41,7 +47,11 @@ type TokenRevokedError struct {
MaxConcurrentSessions int64
}
func (e *TokenRevokedError) Error() string { return "user token revoked" }
func (e *TokenRevokedError) Error() string {
return fmt.Sprintf("%s: user token revoked", ErrInvalidSessionToken)
}
func (e *TokenRevokedError) Unwrap() error { return ErrInvalidSessionToken }
// UserToken represents a user token
type UserToken struct {
@@ -434,9 +434,12 @@ func (h *ContextHandler) initContextWithToken(reqContext *models.ReqContext, org
token, err := h.AuthTokenService.LookupToken(ctx, rawToken)
if err != nil {
reqContext.Logger.Warn("Failed to look up user based on cookie", "error", err)
// Burn the cookie in case of failure
reqContext.Resp.Before(h.deleteInvalidCookieEndOfRequestFunc(reqContext))
reqContext.Logger.Warn("failed to look up session from cookie", "error", err)
if errors.Is(err, models.ErrUserTokenNotFound) || errors.Is(err, models.ErrInvalidSessionToken) {
// Burn the cookie in case of invalid, expired or missing token
reqContext.Resp.Before(h.deleteInvalidCookieEndOfRequestFunc(reqContext))
}
reqContext.LookupTokenErr = err
return false