👔 Fixed token use case

This commit is contained in:
Maxim Lebedev 2022-03-19 19:18:04 +05:00
parent 3b0ebb3690
commit dbe7ba3dc2
Signed by: toby3d
GPG Key ID: 1F14E25B7C119FC5
2 changed files with 25 additions and 28 deletions

View File

@ -91,11 +91,7 @@ func (uc *tokenUseCase) Exchange(ctx context.Context, opts token.ExchangeOptions
}
func (uc *tokenUseCase) Verify(ctx context.Context, accessToken string) (*domain.Token, *domain.Profile, error) {
if _, err := uc.tokens.Get(ctx, accessToken); err != nil {
if errors.Is(err, token.ErrNotExist) {
return nil, nil, token.ErrRevoke
}
if _, err := uc.tokens.Get(ctx, accessToken); err == nil || !errors.Is(err, token.ErrNotExist) {
return nil, nil, fmt.Errorf("cannot check token in store: %w", err)
}
@ -144,10 +140,14 @@ func (uc *tokenUseCase) Verify(ctx context.Context, accessToken string) (*domain
func (uc *tokenUseCase) Revoke(ctx context.Context, accessToken string) error {
tkn, _, err := uc.Verify(ctx, accessToken)
if err != nil {
if errors.Is(err, token.ErrNotExist) {
return nil
}
return fmt.Errorf("cannot verify token: %w", err)
}
if err = uc.tokens.Create(ctx, tkn); err != nil {
if err = uc.tokens.Create(ctx, tkn); err != nil && !errors.Is(err, token.ErrExist) {
return fmt.Errorf("cannot save token in database: %w", err)
}

View File

@ -2,13 +2,10 @@ package usecase_test
import (
"context"
"errors"
"path"
"sync"
"testing"
"github.com/stretchr/testify/assert"
"source.toby3d.me/toby3d/auth/internal/domain"
"source.toby3d.me/toby3d/auth/internal/profile"
profilerepo "source.toby3d.me/toby3d/auth/internal/profile/repository/memory"
@ -36,7 +33,7 @@ func TestExchange(t *testing.T) {
deps := NewDependencies(t)
deps.store.Store(path.Join(profilerepo.DefaultPathPrefix, deps.session.Me.String()), deps.profile)
if err := deps.sessions.Create(context.TODO(), deps.session); err != nil {
if err := deps.sessions.Create(context.Background(), deps.session); err != nil {
t.Fatal(err)
}
@ -52,7 +49,7 @@ func TestExchange(t *testing.T) {
Profiles: deps.profiles,
Sessions: deps.sessions,
Tokens: deps.tokens,
}).Exchange(context.TODO(), opts)
}).Exchange(context.Background(), opts)
if err != nil {
t.Fatal(err)
}
@ -71,7 +68,7 @@ func TestVerify(t *testing.T) {
deps := NewDependencies(t)
ucase := usecase.NewTokenUseCase(usecase.Config{
Config: domain.TestConfig(t),
Config: deps.config,
Profiles: deps.profiles,
Sessions: deps.sessions,
Tokens: deps.tokens,
@ -80,34 +77,35 @@ func TestVerify(t *testing.T) {
t.Run("valid", func(t *testing.T) {
t.Parallel()
accessToken := domain.TestToken(t)
result, _, err := ucase.Verify(context.TODO(), accessToken.AccessToken)
testToken := domain.TestToken(t)
result, _, err := ucase.Verify(context.Background(), testToken.AccessToken)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, accessToken.AccessToken, result.AccessToken)
assert.Equal(t, accessToken.Scope, result.Scope)
assert.Equal(t, accessToken.ClientID.String(), result.ClientID.String())
assert.Equal(t, accessToken.Me.String(), result.Me.String())
if testToken.AccessToken != result.AccessToken ||
testToken.Scope.String() != result.Scope.String() ||
testToken.ClientID.String() != result.ClientID.String() ||
testToken.Me.String() != result.Me.String() {
t.Errorf("Verify(%s) = %v, want %v", testToken.AccessToken, result, testToken)
}
})
t.Run("revoked", func(t *testing.T) {
t.Parallel()
accessToken := domain.TestToken(t)
if err := deps.tokens.Create(context.TODO(), accessToken); err != nil {
testToken := domain.TestToken(t)
if err := deps.tokens.Create(context.Background(), testToken); err != nil {
t.Fatal(err)
}
result, _, err := ucase.Verify(context.TODO(), accessToken.AccessToken)
if !errors.Is(err, token.ErrRevoke) {
t.Errorf("Verify(%s) = %v, want %v", accessToken.AccessToken, err, token.ErrRevoke)
result, _, err := ucase.Verify(context.Background(), testToken.AccessToken)
if err == nil {
t.Errorf("Verify(%s) = %v, want error", testToken.AccessToken, err)
}
if result != nil {
t.Errorf("Verify(%s) = %v, want %v", accessToken.AccessToken, result, nil)
t.Errorf("Verify(%s) = %v, want nil", testToken.AccessToken, result)
}
})
}
@ -116,17 +114,16 @@ func TestRevoke(t *testing.T) {
t.Parallel()
deps := NewDependencies(t)
if err := usecase.NewTokenUseCase(usecase.Config{
Config: deps.config,
Profiles: deps.profiles,
Sessions: deps.sessions,
Tokens: deps.tokens,
}).Revoke(context.TODO(), deps.token.AccessToken); err != nil {
}).Revoke(context.Background(), deps.token.AccessToken); err != nil {
t.Fatal(err)
}
result, err := deps.tokens.Get(context.TODO(), deps.token.AccessToken)
result, err := deps.tokens.Get(context.Background(), deps.token.AccessToken)
if err != nil {
t.Error(err)
}