mirror of
https://github.com/absmach/supermq.git
synced 2026-06-23 04:10:34 +00:00
NOISSUE - Fix refresh token
Continuous Delivery / lint-and-build (push) Has been cancelled
Deploy GitHub Pages / swagger-ui (push) Has been cancelled
CI Pipeline / Lint Proto (push) Has been cancelled
CI Pipeline / Detect Changes (push) Has been cancelled
Continuous Delivery / Build and Push Docker Images (push) Has been cancelled
CI Pipeline / lint-and-build (push) Has been cancelled
CI Pipeline / Test ${{ matrix.module }} (push) Has been cancelled
CI Pipeline / Upload Coverage (push) Has been cancelled
Continuous Delivery / lint-and-build (push) Has been cancelled
Deploy GitHub Pages / swagger-ui (push) Has been cancelled
CI Pipeline / Lint Proto (push) Has been cancelled
CI Pipeline / Detect Changes (push) Has been cancelled
Continuous Delivery / Build and Push Docker Images (push) Has been cancelled
CI Pipeline / lint-and-build (push) Has been cancelled
CI Pipeline / Test ${{ matrix.module }} (push) Has been cancelled
CI Pipeline / Upload Coverage (push) Has been cancelled
Signed-off-by: dusan <borovcanindusan1@gmail.com>
This commit is contained in:
@@ -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())
|
||||
|
||||
@@ -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
@@ -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()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user