mirror of
https://github.com/emo2007/block-accounting.git
synced 2025-04-12 08:56:28 +00:00
40 lines
863 B
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
|
|
}
|