🎨 Little format client and token code
This commit is contained in:
parent
a7ba6267aa
commit
83b9f56a4f
|
@ -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 {
|
||||
|
|
|
@ -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, `<https://app.example.com/redirect>; rel="redirect_uri">`)
|
||||
ctx.Response.Header.Set(http.HeaderLink, `<https://app.example.net/redirect>; rel="redirect_uri">`)
|
||||
ctx.SetStatusCode(http.StatusOK)
|
||||
ctx.SetContentType(common.MIMETextHTML)
|
||||
ctx.SetBodyString(testBody)
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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",
|
||||
},
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue