feat(jwt): clean trash and improve logic

This commit is contained in:
Sipachev Igor 2025-02-14 23:55:56 +07:00
parent a99e990270
commit 340bbe1882

35
jwt.go
View File

@ -12,29 +12,24 @@ import (
"time" "time"
) )
type RefreshTokenClaims struct { func CreateRefreshTokenByAccess(accessClaims JWT, ttl time.Duration) JWT {
JWT return JWT{
} Type: "refresh",
RegisteredClaims: jwt.RegisteredClaims{
func CreateRefreshTokenByAccess(accessClaims JWT, ttl time.Duration) RefreshTokenClaims { ID: accessClaims.ID,
return RefreshTokenClaims{ ExpiresAt: jwt.NewNumericDate(time.Now().Add(ttl)),
JWT: JWT{ IssuedAt: jwt.NewNumericDate(time.Now()),
Type: "refresh", NotBefore: accessClaims.ExpiresAt,
Ttl: ttl,
SessionId: accessClaims.SessionId,
RegisteredClaims: jwt.RegisteredClaims{
ID: accessClaims.ID,
},
}, },
} }
} }
func ParseRefreshToken(token string, publicKey *rsa.PublicKey) (*RefreshTokenClaims, error) { func ParseRefreshToken(token string, publicKey *rsa.PublicKey) (*JWT, error) {
refreshDecodedClaims, err := Decode(token, &RefreshTokenClaims{}, publicKey) refreshDecodedClaims, err := Decode(token, &JWT{}, publicKey)
if err != nil { if err != nil {
return nil, err return nil, err
} }
refreshTokenClaims, ok := refreshDecodedClaims.(*RefreshTokenClaims) refreshTokenClaims, ok := refreshDecodedClaims.(*JWT)
if !ok { if !ok {
return nil, fmt.Errorf("invalid refresh token claims") return nil, fmt.Errorf("invalid refresh token claims")
} }
@ -42,15 +37,13 @@ func ParseRefreshToken(token string, publicKey *rsa.PublicKey) (*RefreshTokenCla
} }
type JWT struct { type JWT struct {
Type string `json:"t"` Type string `json:"t"`
Ttl time.Duration `json:"td"` SessionId string `json:"si,omitempty"`
SessionId string `json:"si,omitempty"` AuthorizationInfo string `json:"ai,omitempty"`
AuthorizationInfo string `json:"ai,omitempty"`
jwt.RegisteredClaims jwt.RegisteredClaims
} }
func (j *JWT) WithTtl(ttl time.Duration) *JWT { func (j *JWT) WithTtl(ttl time.Duration) *JWT {
j.Ttl = ttl
j.ExpiresAt = jwt.NewNumericDate(time.Now().Add(ttl)) j.ExpiresAt = jwt.NewNumericDate(time.Now().Add(ttl))
j.IssuedAt = jwt.NewNumericDate(time.Now()) j.IssuedAt = jwt.NewNumericDate(time.Now())
j.NotBefore = jwt.NewNumericDate(time.Now()) j.NotBefore = jwt.NewNumericDate(time.Now())