55 lines
1.8 KiB
Go
55 lines
1.8 KiB
Go
package jwt
|
|
|
|
import (
|
|
"github.com/rwadurian/mpc-system/pkg/jwt"
|
|
"github.com/rwadurian/mpc-system/services/account/application/ports"
|
|
)
|
|
|
|
// TokenServiceAdapter implements TokenService using JWT
|
|
type TokenServiceAdapter struct {
|
|
jwtService *jwt.JWTService
|
|
}
|
|
|
|
// NewTokenServiceAdapter creates a new TokenServiceAdapter
|
|
func NewTokenServiceAdapter(jwtService *jwt.JWTService) ports.TokenService {
|
|
return &TokenServiceAdapter{jwtService: jwtService}
|
|
}
|
|
|
|
// GenerateAccessToken generates an access token for an account
|
|
func (t *TokenServiceAdapter) GenerateAccessToken(accountID, username string) (string, error) {
|
|
return t.jwtService.GenerateAccessToken(accountID, username)
|
|
}
|
|
|
|
// GenerateRefreshToken generates a refresh token for an account
|
|
func (t *TokenServiceAdapter) GenerateRefreshToken(accountID string) (string, error) {
|
|
return t.jwtService.GenerateRefreshToken(accountID)
|
|
}
|
|
|
|
// ValidateAccessToken validates an access token
|
|
func (t *TokenServiceAdapter) ValidateAccessToken(token string) (claims map[string]interface{}, err error) {
|
|
accessClaims, err := t.jwtService.ValidateAccessToken(token)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return map[string]interface{}{
|
|
"subject": accessClaims.Subject,
|
|
"username": accessClaims.Username,
|
|
"issuer": accessClaims.Issuer,
|
|
}, nil
|
|
}
|
|
|
|
// ValidateRefreshToken validates a refresh token
|
|
func (t *TokenServiceAdapter) ValidateRefreshToken(token string) (accountID string, err error) {
|
|
claims, err := t.jwtService.ValidateRefreshToken(token)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return claims.Subject, nil
|
|
}
|
|
|
|
// RefreshAccessToken refreshes an access token using a refresh token
|
|
func (t *TokenServiceAdapter) RefreshAccessToken(refreshToken string) (accessToken string, err error) {
|
|
return t.jwtService.RefreshAccessToken(refreshToken)
|
|
}
|