123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- package auth
- import (
- "time"
- "git.linuxforward.com/byom/byom-golang-lib/pkg/errors"
- "github.com/golang-jwt/jwt/v5"
- )
- type JWTService struct {
- secretKey []byte
- }
- func NewJWTService(secretKey string) *JWTService {
- return &JWTService{
- secretKey: []byte(secretKey),
- }
- }
- func (s *JWTService) GenerateToken(userID string, duration time.Duration) (string, error) {
- claims := jwt.MapClaims{
- "user_id": userID,
- "exp": time.Now().Add(duration).Unix(),
- "iat": time.Now().Unix(),
- }
- token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
- signedToken, err := token.SignedString(s.secretKey)
- if err != nil {
- return "", errors.NewAuthError("generate", err)
- }
- return signedToken, nil
- }
- func (s *JWTService) ValidateToken(tokenString string) (jwt.MapClaims, error) {
- if tokenString == "" {
- return nil, errors.NewAuthError("validate", errors.ErrInvalidInput)
- }
- token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
- if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
- return nil, errors.NewAuthError("validate", errors.ErrInvalidInput)
- }
- return s.secretKey, nil
- })
- if err != nil {
- return nil, errors.NewAuthError("parse", err)
- }
- if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
- return claims, nil
- }
- return nil, errors.NewAuthError("validate", errors.ErrInvalidInput)
- }
|