only remove invalid session cookie if it's invalid/expired/missing
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user