block-accounting/backend/internal/usecase/interactors/jwt/jwt.go

40 lines
863 B
Go

package jwt
import (
"fmt"
"time"
"github.com/emochka2007/block-accounting/internal/pkg/models"
"github.com/golang-jwt/jwt/v5"
)
type JWTInteractor interface {
NewToken(user models.UserIdentity, duration time.Duration) (string, error)
}
type jwtInteractor struct {
secret []byte
}
func NewWardenJWT(secret []byte) JWTInteractor {
return &jwtInteractor{secret}
}
// NewToken creates new JWT token for given user
func (w *jwtInteractor) NewToken(user models.UserIdentity, duration time.Duration) (string, error) {
token := jwt.New(jwt.SigningMethodHS256)
claims := token.Claims.(jwt.MapClaims)
claims["uid"] = user.Id()
claims["exp"] = time.Now().Add(duration).Unix()
secret := w.secret
tokenString, err := token.SignedString([]byte(secret))
if err != nil {
return "", fmt.Errorf("error sign token. %w", err)
}
return tokenString, nil
}