69 lines
1.6 KiB
Go
69 lines
1.6 KiB
Go
package jwtx
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
)
|
|
|
|
// Storer is the interface that storage the token.
|
|
type Storer interface {
|
|
Set(ctx context.Context, tokenStr string, expiration time.Duration) error
|
|
Delete(ctx context.Context, tokenStr string) error
|
|
Check(ctx context.Context, tokenStr string) (bool, error)
|
|
Close(ctx context.Context) error
|
|
}
|
|
|
|
type storeOptions struct {
|
|
CacheNS string // default "jwt"
|
|
}
|
|
|
|
type StoreOption func(*storeOptions)
|
|
|
|
func WithCacheNS(ns string) StoreOption {
|
|
return func(o *storeOptions) {
|
|
o.CacheNS = ns
|
|
}
|
|
}
|
|
|
|
type Cacher interface {
|
|
Set(ctx context.Context, ns, key, value string, expiration ...time.Duration) error
|
|
Get(ctx context.Context, ns, key string) (string, bool, error)
|
|
Exists(ctx context.Context, ns, key string) (bool, error)
|
|
Delete(ctx context.Context, ns, key string) error
|
|
Close(ctx context.Context) error
|
|
}
|
|
|
|
func NewStoreWithCache(cache Cacher, opts ...StoreOption) Storer {
|
|
s := &storeImpl{
|
|
c: cache,
|
|
opts: &storeOptions{
|
|
CacheNS: "jwt",
|
|
},
|
|
}
|
|
for _, opt := range opts {
|
|
opt(s.opts)
|
|
}
|
|
return s
|
|
}
|
|
|
|
type storeImpl struct {
|
|
opts *storeOptions
|
|
c Cacher
|
|
}
|
|
|
|
func (s *storeImpl) Set(ctx context.Context, tokenStr string, expiration time.Duration) error {
|
|
return s.c.Set(ctx, s.opts.CacheNS, tokenStr, "", expiration)
|
|
}
|
|
|
|
func (s *storeImpl) Delete(ctx context.Context, tokenStr string) error {
|
|
return s.c.Delete(ctx, s.opts.CacheNS, tokenStr)
|
|
}
|
|
|
|
func (s *storeImpl) Check(ctx context.Context, tokenStr string) (bool, error) {
|
|
return s.c.Exists(ctx, s.opts.CacheNS, tokenStr)
|
|
}
|
|
|
|
func (s *storeImpl) Close(ctx context.Context) error {
|
|
return s.c.Close(ctx)
|
|
}
|