NOISSUE - Fix refresh token

Signed-off-by: dusan <borovcanindusan1@gmail.com>
This commit is contained in:
dusan
2026-04-01 18:06:21 +02:00
parent 351b25cd85
commit cc84466e7d
3 changed files with 34 additions and 10 deletions
+1
View File
@@ -31,6 +31,7 @@ func EncodeError(err error) error {
return status.Error(codes.InvalidArgument, err.Error())
case errors.Contains(err, svcerr.ErrAuthentication),
errors.Contains(err, auth.ErrKeyExpired),
errors.Contains(err, auth.ErrRevokedToken),
err == apiutil.ErrMissingEmail,
err == apiutil.ErrBearerToken:
return status.Error(codes.Unauthenticated, err.Error())
+6
View File
@@ -365,6 +365,12 @@ func (svc service) refreshKey(ctx context.Context, token string, key Key) (Token
return Token{}, errors.Wrap(errIssueTmp, err)
}
if key.Subject != "" && key.ExpiresAt.After(time.Now()) {
if err := svc.tokensCache.SaveActive(ctx, key.Subject, key.ID, key.Description, key.ExpiresAt); err != nil {
return Token{}, errors.Wrap(errSaveRefreshKey, err)
}
}
return Token{AccessToken: access, RefreshToken: refresh}, nil
}
+27 -10
View File
@@ -303,16 +303,17 @@ func TestIssue(t *testing.T) {
}
cases4 := []struct {
desc string
key auth.Key
token string
parseRes auth.Key
parseErr error
roleCheckErr error
issueErr error
cacheRes bool
cacheErr error
err error
desc string
key auth.Key
token string
parseRes auth.Key
parseErr error
roleCheckErr error
issueErr error
cacheRes bool
cacheErr error
saveActiveErr error
err error
}{
{
desc: "issue refresh key",
@@ -365,6 +366,20 @@ func TestIssue(t *testing.T) {
roleCheckErr: errRoleAuth,
err: errRoleAuth,
},
{
desc: "issue refresh key with failed to save active token",
key: auth.Key{
Type: auth.RefreshKey,
IssuedAt: time.Now(),
Subject: userID,
Role: auth.UserRole,
},
token: refreshToken,
parseRes: refreshkey,
cacheRes: true,
saveActiveErr: svcerr.ErrCreateEntity,
err: svcerr.ErrCreateEntity,
},
{
desc: "issue refresh key with revoked refresh token",
key: auth.Key{
@@ -400,6 +415,7 @@ func TestIssue(t *testing.T) {
tokenizerCall1 := tokenizer.On("Parse", mock.Anything, tc.token).Return(tc.parseRes, tc.parseErr)
tokenizerCall2 := tokenizer.On("Revoke", mock.Anything, tc.token).Return(tc.parseErr)
cacheCall := tokensCache.On("IsActive", context.Background(), tc.parseRes.ID).Return(tc.cacheRes, tc.cacheErr)
saveActiveCall := tokensCache.On("SaveActive", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(tc.saveActiveErr)
policyCall := pEvaluator.On("CheckPolicy", mock.Anything, policies.Policy{
Subject: tc.key.Subject,
SubjectType: policies.UserType,
@@ -414,6 +430,7 @@ func TestIssue(t *testing.T) {
tokenizerCall2.Unset()
policyCall.Unset()
cacheCall.Unset()
saveActiveCall.Unset()
})
}
}