🎨 Little format client and token code

This commit is contained in:
Maxim Lebedev 2021-10-05 11:54:36 +05:00
parent a7ba6267aa
commit 83b9f56a4f
Signed by: toby3d
GPG Key ID: 1F14E25B7C119FC5
9 changed files with 39 additions and 28 deletions

View File

@ -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 {

View File

@ -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)

View File

@ -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
}

View File

@ -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)
}

View File

@ -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)

View File

@ -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",
},
}

View File

@ -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",
}

View File

@ -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
}

View File

@ -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)
}