rwadurian/backend/mpc-system/services/account/adapters/output/jwt/token_service.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)
}