AI: checking the actual expire
This commit is contained in:
@ -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
|
||||
|
Reference in New Issue
Block a user