auth/internal/token/repository/memory/memory_token.go

62 lines
1.2 KiB
Go
Raw Normal View History

package memory
import (
"context"
"path"
"sync"
"source.toby3d.me/website/oauth/internal/domain"
2021-09-20 15:45:54 +00:00
"source.toby3d.me/website/oauth/internal/token"
)
type memoryTokenRepository struct {
2021-09-22 21:32:40 +00:00
tokens *sync.Map
}
const Key string = "tokens"
2021-09-22 21:32:40 +00:00
func NewMemoryTokenRepository(tokens *sync.Map) token.Repository {
return &memoryTokenRepository{
2021-09-22 21:32:40 +00:00
tokens: tokens,
}
}
func (repo *memoryTokenRepository) Get(ctx context.Context, accessToken string) (*domain.Token, error) {
src, ok := repo.tokens.Load(path.Join(Key, accessToken))
2021-09-22 21:32:40 +00:00
if !ok {
return nil, nil
}
result, ok := src.(*domain.Token)
2021-09-22 21:32:40 +00:00
if !ok {
return nil, nil
}
2021-09-22 21:32:40 +00:00
return result, nil
}
func (repo *memoryTokenRepository) Create(ctx context.Context, accessToken *domain.Token) error {
2021-09-22 21:32:40 +00:00
t, err := repo.Get(ctx, accessToken.AccessToken)
if err != nil {
return err
}
2021-09-20 15:45:54 +00:00
2021-09-22 21:32:40 +00:00
if t != nil {
return token.ErrExist
2021-09-20 15:45:54 +00:00
}
2021-09-22 21:32:40 +00:00
return repo.Update(ctx, accessToken)
2021-09-20 15:45:54 +00:00
}
func (repo *memoryTokenRepository) Update(ctx context.Context, accessToken *domain.Token) error {
repo.tokens.Store(path.Join(Key, accessToken.AccessToken), accessToken)
2021-09-20 15:45:54 +00:00
2021-09-22 21:32:40 +00:00
return nil
}
2021-09-22 21:32:40 +00:00
func (repo *memoryTokenRepository) Remove(ctx context.Context, accessToken string) error {
repo.tokens.Delete(path.Join(Key, accessToken))
2021-09-20 15:45:54 +00:00
return nil
}