diff --git a/backend/middleware/jwt.go b/backend/middleware/jwt.go index c1957d5..99a90d8 100644 --- a/backend/middleware/jwt.go +++ b/backend/middleware/jwt.go @@ -1,6 +1,7 @@ package middleware import ( + "encoding/json" "errors" "time" @@ -78,12 +79,41 @@ func (jm *JwtManager) GetUserIdFromAccess(accessToken string) (uuid.UUID, error) return uuid.Nil, err } + // Check if token is valid (including expiry check) + if !token.Valid { + return uuid.Nil, NotValidToken + } + if claims, ok := token.Claims.(jwt.MapClaims); ok { tokenType, ok := claims["Type"] if !ok || tokenType.(string) != "access" { return uuid.Nil, NotValidToken } + // Additional explicit expiry check + expireClaim, ok := claims["Expire"] + if !ok { + return uuid.Nil, NotValidToken + } + + var expireTime time.Time + switch exp := expireClaim.(type) { + case float64: + expireTime = time.Unix(int64(exp), 0) + case json.Number: + expInt, err := exp.Int64() + if err != nil { + return uuid.Nil, NotValidToken + } + expireTime = time.Unix(expInt, 0) + default: + return uuid.Nil, NotValidToken + } + + if time.Now().After(expireTime) { + return uuid.Nil, NotValidToken + } + userId, err := uuid.Parse(claims["UserID"].(string)) if err != nil { return uuid.Nil, NotValidToken