@@ -30,6 +30,10 @@ func New(config Config, revoked *revokedStorage) (Service, error) {
3030 return nil , err
3131 }
3232
33+ if revoked == nil {
34+ return nil , fmt .Errorf ("%w: revoked storage is required" , ErrInitFailed )
35+ }
36+
3337 idFactory , err := nanoid .Standard (jtiLength )
3438 if err != nil {
3539 return nil , fmt .Errorf ("can't create id factory: %w" , err )
@@ -45,6 +49,10 @@ func New(config Config, revoked *revokedStorage) (Service, error) {
4549}
4650
4751func (s * service ) GenerateToken (userID string , scopes []string , ttl time.Duration ) (string , error ) {
52+ if ttl < 0 {
53+ return "" , fmt .Errorf ("%w: ttl must be non-negative" , ErrInvalidConfig )
54+ }
55+
4856 if ttl == 0 {
4957 ttl = s .config .TTL
5058 }
@@ -53,7 +61,7 @@ func (s *service) GenerateToken(userID string, scopes []string, ttl time.Duratio
5361 claims := & Claims {
5462 RegisteredClaims : jwt.RegisteredClaims {
5563 ID : s .idFactory (),
56- Issuer : "sms-gate.app" ,
64+ Issuer : s . config . Issuer ,
5765 Subject : userID ,
5866 IssuedAt : jwt .NewNumericDate (now ),
5967 ExpiresAt : jwt .NewNumericDate (now .Add (min (ttl , s .config .TTL ))),
@@ -73,7 +81,7 @@ func (s *service) GenerateToken(userID string, scopes []string, ttl time.Duratio
7381
7482func (s * service ) ParseToken (ctx context.Context , token string ) (* Claims , error ) {
7583 parsedToken , err := jwt .ParseWithClaims (token , new (Claims ), func (t * jwt.Token ) (any , error ) {
76- if _ , ok := t .Method .( * jwt. SigningMethodHMAC ); ! ok {
84+ if t .Method != jwt . SigningMethodHS256 {
7785 return nil , fmt .Errorf ("%w: %v" , ErrUnexpectedSigningMethod , t .Header ["alg" ])
7886 }
7987 return []byte (s .config .Secret ), nil
@@ -99,5 +107,5 @@ func (s *service) ParseToken(ctx context.Context, token string) (*Claims, error)
99107}
100108
101109func (s * service ) RevokeToken (ctx context.Context , jti string ) error {
102- return s .revoked .Revoke (ctx , jti )
110+ return s .revoked .Revoke (ctx , jti , s . config . TTL )
103111}
0 commit comments