From 83b9f56a4f664d7971d0da114bb6f087c49513bb Mon Sep 17 00:00:00 2001 From: Maxim Lebedev Date: Tue, 5 Oct 2021 11:54:36 +0500 Subject: [PATCH] :art: Little format client and token code --- .../client/repository/http/http_client.go | 12 +++++----- .../repository/http/http_client_test.go | 2 +- .../client/repository/memory/memory_client.go | 5 +++- .../repository/memory/memory_client_test.go | 7 +++--- internal/client/usecase/client_ucase_test.go | 3 ++- internal/domain/client.go | 4 ++-- internal/domain/token.go | 2 ++ .../token/repository/memory/memory_token.go | 9 +++++--- .../repository/memory/memory_token_test.go | 23 ++++++++++--------- 9 files changed, 39 insertions(+), 28 deletions(-) diff --git a/internal/client/repository/http/http_client.go b/internal/client/repository/http/http_client.go index 4316afb..7d5aceb 100644 --- a/internal/client/repository/http/http_client.go +++ b/internal/client/repository/http/http_client.go @@ -39,9 +39,14 @@ func NewHTTPClientRepository(c *http.Client) client.Repository { } func (repo *httpClientRepository) Get(ctx context.Context, id string) (*domain.Client, error) { + u, err := url.Parse(id) + if err != nil { + return nil, errors.Wrap(err, "failed to parse id as url") + } + req := http.AcquireRequest() defer http.ReleaseRequest(req) - req.SetRequestURI(id) + req.SetRequestURI(u.String()) req.Header.SetMethod(http.MethodGet) resp := http.AcquireResponse() @@ -62,11 +67,6 @@ func (repo *httpClientRepository) Get(ctx context.Context, id string) (*domain.C client.RedirectURI = append(client.RedirectURI, l.URL) } - u, err := url.Parse(id) - if err != nil { - return nil, errors.Wrap(err, "failed to parse id as url") - } - data := microformats.Parse(bytes.NewReader(resp.Body()), u) for _, item := range data.Items { diff --git a/internal/client/repository/http/http_client_test.go b/internal/client/repository/http/http_client_test.go index ea3e22b..a1c3706 100644 --- a/internal/client/repository/http/http_client_test.go +++ b/internal/client/repository/http/http_client_test.go @@ -36,7 +36,7 @@ func TestGet(t *testing.T) { t.Parallel() client, _, cleanup := util.TestServe(t, func(ctx *http.RequestCtx) { - ctx.Response.Header.Set(http.HeaderLink, `; rel="redirect_uri">`) + ctx.Response.Header.Set(http.HeaderLink, `; rel="redirect_uri">`) ctx.SetStatusCode(http.StatusOK) ctx.SetContentType(common.MIMETextHTML) ctx.SetBodyString(testBody) diff --git a/internal/client/repository/memory/memory_client.go b/internal/client/repository/memory/memory_client.go index e373340..b506611 100644 --- a/internal/client/repository/memory/memory_client.go +++ b/internal/client/repository/memory/memory_client.go @@ -2,6 +2,7 @@ package memory import ( "context" + "path" "sync" "source.toby3d.me/website/oauth/internal/client" @@ -12,6 +13,8 @@ type memoryClientRepository struct { clients *sync.Map } +const Key string = "clients" + func NewMemoryClientRepository(clients *sync.Map) client.Repository { return &memoryClientRepository{ clients: clients, @@ -19,7 +22,7 @@ func NewMemoryClientRepository(clients *sync.Map) client.Repository { } func (repo *memoryClientRepository) Get(ctx context.Context, id string) (*domain.Client, error) { - src, ok := repo.clients.Load(id) + src, ok := repo.clients.Load(path.Join(Key, id)) if !ok { return nil, nil } diff --git a/internal/client/repository/memory/memory_client_test.go b/internal/client/repository/memory/memory_client_test.go index 3dddb2d..35bafd4 100644 --- a/internal/client/repository/memory/memory_client_test.go +++ b/internal/client/repository/memory/memory_client_test.go @@ -2,13 +2,14 @@ package memory_test import ( "context" + "path" "sync" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "source.toby3d.me/website/oauth/internal/client/repository/memory" + repository "source.toby3d.me/website/oauth/internal/client/repository/memory" "source.toby3d.me/website/oauth/internal/domain" ) @@ -18,9 +19,9 @@ func TestGet(t *testing.T) { store := new(sync.Map) client := domain.TestClient(t) - store.Store(client.ID, client) + store.Store(path.Join(repository.Key, client.ID), client) - result, err := memory.NewMemoryClientRepository(store).Get(context.TODO(), client.ID) + result, err := repository.NewMemoryClientRepository(store).Get(context.TODO(), client.ID) require.NoError(t, err) assert.Equal(t, client, result) } diff --git a/internal/client/usecase/client_ucase_test.go b/internal/client/usecase/client_ucase_test.go index 145cd04..0ad0fae 100644 --- a/internal/client/usecase/client_ucase_test.go +++ b/internal/client/usecase/client_ucase_test.go @@ -2,6 +2,7 @@ package usecase_test import ( "context" + "path" "sync" "testing" @@ -19,7 +20,7 @@ func TestDiscovery(t *testing.T) { store := new(sync.Map) client := domain.TestClient(t) - store.Store(client.ID, client) + store.Store(path.Join(repository.Key, client.ID), client) result, err := usecase.NewClientUseCase(repository.NewMemoryClientRepository(store)).Discovery(context.TODO(), client.ID) diff --git a/internal/domain/client.go b/internal/domain/client.go index 01cb264..8b7cae4 100644 --- a/internal/domain/client.go +++ b/internal/domain/client.go @@ -3,10 +3,10 @@ package domain import "testing" type Client struct { + RedirectURI []string ID string Logo string Name string - RedirectURI []string URL string } @@ -26,7 +26,7 @@ func TestClient(tb testing.TB) *Client { Logo: "https://app.example.com/logo.png", URL: "https://app.example.com/", RedirectURI: []string{ - "https://app.example.com/redirect", + "https://app.example.net/redirect", "https://app.example.com/redirect", }, } diff --git a/internal/domain/token.go b/internal/domain/token.go index 29099be..66195a5 100644 --- a/internal/domain/token.go +++ b/internal/domain/token.go @@ -10,6 +10,7 @@ type Token struct { AccessToken string ClientID string Me string + Profile *Profile Scopes []string Type string } @@ -29,6 +30,7 @@ func TestToken(tb testing.TB) *Token { AccessToken: random.New().String(32), ClientID: "https://app.example.com/", Me: "https://user.example.net/", + Profile: TestProfile(tb), Scopes: []string{"create", "update", "delete"}, Type: "Bearer", } diff --git a/internal/token/repository/memory/memory_token.go b/internal/token/repository/memory/memory_token.go index 09961ad..2d991fe 100644 --- a/internal/token/repository/memory/memory_token.go +++ b/internal/token/repository/memory/memory_token.go @@ -2,6 +2,7 @@ package memory import ( "context" + "path" "sync" "source.toby3d.me/website/oauth/internal/domain" @@ -12,6 +13,8 @@ type memoryTokenRepository struct { tokens *sync.Map } +const Key string = "tokens" + func NewMemoryTokenRepository(tokens *sync.Map) token.Repository { return &memoryTokenRepository{ tokens: tokens, @@ -19,7 +22,7 @@ func NewMemoryTokenRepository(tokens *sync.Map) token.Repository { } func (repo *memoryTokenRepository) Get(ctx context.Context, accessToken string) (*domain.Token, error) { - src, ok := repo.tokens.Load(accessToken) + src, ok := repo.tokens.Load(path.Join(Key, accessToken)) if !ok { return nil, nil } @@ -46,13 +49,13 @@ func (repo *memoryTokenRepository) Create(ctx context.Context, accessToken *doma } func (repo *memoryTokenRepository) Update(ctx context.Context, accessToken *domain.Token) error { - repo.tokens.Store(accessToken.AccessToken, accessToken) + repo.tokens.Store(path.Join(Key, accessToken.AccessToken), accessToken) return nil } func (repo *memoryTokenRepository) Remove(ctx context.Context, accessToken string) error { - repo.tokens.Delete(accessToken) + repo.tokens.Delete(path.Join(Key, accessToken)) return nil } diff --git a/internal/token/repository/memory/memory_token_test.go b/internal/token/repository/memory/memory_token_test.go index 33f9c4d..936e126 100644 --- a/internal/token/repository/memory/memory_token_test.go +++ b/internal/token/repository/memory/memory_token_test.go @@ -2,6 +2,7 @@ package memory_test import ( "context" + "path" "sync" "testing" @@ -10,7 +11,7 @@ import ( "source.toby3d.me/website/oauth/internal/domain" "source.toby3d.me/website/oauth/internal/token" - "source.toby3d.me/website/oauth/internal/token/repository/memory" + repository "source.toby3d.me/website/oauth/internal/token/repository/memory" ) func TestGet(t *testing.T) { @@ -19,9 +20,9 @@ func TestGet(t *testing.T) { store := new(sync.Map) accessToken := domain.TestToken(t) - store.Store(accessToken.AccessToken, accessToken) + store.Store(path.Join(repository.Key, accessToken.AccessToken), accessToken) - result, err := memory.NewMemoryTokenRepository(store).Get(context.TODO(), accessToken.AccessToken) + result, err := repository.NewMemoryTokenRepository(store).Get(context.TODO(), accessToken.AccessToken) require.NoError(t, err) assert.Equal(t, accessToken, result) } @@ -32,10 +33,10 @@ func TestCreate(t *testing.T) { store := new(sync.Map) accessToken := domain.TestToken(t) - repo := memory.NewMemoryTokenRepository(store) + repo := repository.NewMemoryTokenRepository(store) require.NoError(t, repo.Create(context.TODO(), accessToken)) - result, ok := store.Load(accessToken.AccessToken) + result, ok := store.Load(path.Join(repository.Key, accessToken.AccessToken)) assert.True(t, ok) assert.Equal(t, accessToken, result) @@ -48,15 +49,15 @@ func TestUpdate(t *testing.T) { store := new(sync.Map) accessToken := domain.TestToken(t) - store.Store(accessToken.AccessToken, accessToken) + store.Store(path.Join(repository.Key, accessToken.AccessToken), accessToken) tokenCopy := *accessToken tokenCopy.ClientID = "https://client.example.com/" tokenCopy.Me = "https://toby3d.ru/" - require.NoError(t, memory.NewMemoryTokenRepository(store).Update(context.TODO(), &tokenCopy)) + require.NoError(t, repository.NewMemoryTokenRepository(store).Update(context.TODO(), &tokenCopy)) - result, ok := store.Load(accessToken.AccessToken) + result, ok := store.Load(path.Join(repository.Key, accessToken.AccessToken)) assert.True(t, ok) assert.NotEqual(t, accessToken, result) assert.Equal(t, &tokenCopy, result) @@ -68,11 +69,11 @@ func TestDelete(t *testing.T) { store := new(sync.Map) accessToken := domain.TestToken(t) - store.Store(accessToken.AccessToken, accessToken) + store.Store(path.Join(repository.Key, accessToken.AccessToken), accessToken) - require.NoError(t, memory.NewMemoryTokenRepository(store).Remove(context.TODO(), accessToken.AccessToken)) + require.NoError(t, repository.NewMemoryTokenRepository(store).Remove(context.TODO(), accessToken.AccessToken)) - result, ok := store.Load(accessToken.AccessToken) + result, ok := store.Load(path.Join(repository.Key, accessToken.AccessToken)) assert.False(t, ok) assert.Nil(t, result) }