session 인터페이스 수정

This commit is contained in:
2023-09-04 14:35:33 +09:00
parent 0eefb438a6
commit 821dc5c639
3 changed files with 35 additions and 35 deletions

View File

@ -30,13 +30,13 @@ type Authorization struct {
type Provider interface { type Provider interface {
New(*Authorization) (string, error) New(*Authorization) (string, error)
Delete(primitive.ObjectID) error Delete(primitive.ObjectID) error
Query(string) (*Authorization, error) Query(string) (Authorization, error)
Touch(string) (bool, error) Touch(string) (bool, error)
} }
type Consumer interface { type Consumer interface {
Query(string) (*Authorization, error) Query(string) (Authorization, error)
Touch(string) (*Authorization, error) Touch(string) (Authorization, error)
} }
type storagekey string type storagekey string

View File

@ -67,14 +67,14 @@ func (p *provider_mongo) Delete(acc primitive.ObjectID) error {
return err return err
} }
func (p *provider_mongo) Query(pk string) (*Authorization, error) { func (p *provider_mongo) Query(pk string) (Authorization, error) {
sk := publickey_to_storagekey(publickey(pk)) sk := publickey_to_storagekey(publickey(pk))
var auth Authorization var auth Authorization
err := p.mongoClient.FindOneAs(session_collection_name, bson.M{ err := p.mongoClient.FindOneAs(session_collection_name, bson.M{
"key": sk, "key": sk,
}, &auth) }, &auth)
return &auth, err return auth, err
} }
func (p *provider_mongo) Touch(pk string) (bool, error) { func (p *provider_mongo) Touch(pk string) (bool, error) {
@ -251,28 +251,28 @@ func (c *consumer_mongo) query_internal(sk storagekey) (*sessionMongo, bool, err
return nil, false, nil return nil, false, nil
} }
func (c *consumer_mongo) Query(pk string) (*Authorization, error) { func (c *consumer_mongo) Query(pk string) (Authorization, error) {
c.lock.Lock() c.lock.Lock()
defer c.lock.Unlock() defer c.lock.Unlock()
sk := publickey_to_storagekey(publickey(pk)) sk := publickey_to_storagekey(publickey(pk))
si, _, err := c.query_internal(sk) si, _, err := c.query_internal(sk)
if err != nil { if err != nil {
return nil, err return Authorization{}, err
} }
if si == nil { if si == nil {
return nil, nil return Authorization{}, nil
} }
if time.Now().After(si.Ts.Time().Add(c.ttl)) { if time.Now().After(si.Ts.Time().Add(c.ttl)) {
return nil, nil return Authorization{}, nil
} }
return si.Auth, nil return *si.Auth, nil
} }
func (c *consumer_mongo) Touch(pk string) (*Authorization, error) { func (c *consumer_mongo) Touch(pk string) (Authorization, error) {
c.lock.Lock() c.lock.Lock()
defer c.lock.Unlock() defer c.lock.Unlock()
@ -287,21 +287,21 @@ func (c *consumer_mongo) Touch(pk string) (*Authorization, error) {
if err != nil { if err != nil {
logger.Println("consumer Touch :", err) logger.Println("consumer Touch :", err)
return nil, err return Authorization{}, err
} }
if !worked { if !worked {
// 이미 만료되서 사라짐 // 이미 만료되서 사라짐
return nil, nil return Authorization{}, nil
} }
si, added, err := c.query_internal(sk) si, added, err := c.query_internal(sk)
if err != nil { if err != nil {
return nil, err return Authorization{}, err
} }
if si == nil { if si == nil {
return nil, nil return Authorization{}, nil
} }
if !added { if !added {
@ -312,18 +312,18 @@ func (c *consumer_mongo) Touch(pk string) (*Authorization, error) {
if err != nil { if err != nil {
logger.Println("consumer Query :", err) logger.Println("consumer Query :", err)
return nil, err return Authorization{}, err
} }
if len(si.Key) > 0 { if len(si.Key) > 0 {
c.add_internal(sk, &doc) c.add_internal(sk, &doc)
c.ids[doc.Id] = sk c.ids[doc.Id] = sk
return doc.Auth, nil return *doc.Auth, nil
} }
} }
return si.Auth, nil return *si.Auth, nil
} }
func (c *consumer_mongo) add(sk storagekey, id primitive.ObjectID, si *sessionMongo) { func (c *consumer_mongo) add(sk storagekey, id primitive.ObjectID, si *sessionMongo) {

View File

@ -70,21 +70,21 @@ func (p *provider_redis) Delete(account primitive.ObjectID) error {
return nil return nil
} }
func (p *provider_redis) Query(pk string) (*Authorization, error) { func (p *provider_redis) Query(pk string) (Authorization, error) {
sk := publickey_to_storagekey(publickey(pk)) sk := publickey_to_storagekey(publickey(pk))
payload, err := p.redisClient.Get(p.ctx, string(sk)).Result() payload, err := p.redisClient.Get(p.ctx, string(sk)).Result()
if err == redis.Nil { if err == redis.Nil {
return nil, nil return Authorization{}, nil
} else if err != nil { } else if err != nil {
return nil, err return Authorization{}, err
} }
var auth Authorization var auth Authorization
if err := bson.Unmarshal([]byte(payload), &auth); err != nil { if err := bson.Unmarshal([]byte(payload), &auth); err != nil {
return nil, err return Authorization{}, err
} }
return &auth, nil return auth, nil
} }
func (p *provider_redis) Touch(pk string) (bool, error) { func (p *provider_redis) Touch(pk string) (bool, error) {
@ -226,49 +226,49 @@ func (c *consumer_redis) query_internal(sk storagekey) (*sessionRedis, bool, err
return si, true, nil return si, true, nil
} }
func (c *consumer_redis) Query(pk string) (*Authorization, error) { func (c *consumer_redis) Query(pk string) (Authorization, error) {
c.lock.Lock() c.lock.Lock()
defer c.lock.Unlock() defer c.lock.Unlock()
sk := publickey_to_storagekey(publickey(pk)) sk := publickey_to_storagekey(publickey(pk))
si, _, err := c.query_internal(sk) si, _, err := c.query_internal(sk)
if err != nil { if err != nil {
return nil, err return Authorization{}, err
} }
if si == nil { if si == nil {
return nil, nil return Authorization{}, nil
} }
if time.Now().After(si.expireAt) { if time.Now().After(si.expireAt) {
return nil, nil return Authorization{}, nil
} }
return si.Authorization, nil return *si.Authorization, nil
} }
func (c *consumer_redis) Touch(pk string) (*Authorization, error) { func (c *consumer_redis) Touch(pk string) (Authorization, error) {
c.lock.Lock() c.lock.Lock()
defer c.lock.Unlock() defer c.lock.Unlock()
sk := publickey_to_storagekey(publickey(pk)) sk := publickey_to_storagekey(publickey(pk))
ok, err := c.redisClient.Expire(c.ctx, string(sk), c.ttl).Result() ok, err := c.redisClient.Expire(c.ctx, string(sk), c.ttl).Result()
if err == redis.Nil { if err == redis.Nil {
return nil, nil return Authorization{}, nil
} else if err != nil { } else if err != nil {
logger.Println("consumer Touch :", err) logger.Println("consumer Touch :", err)
return nil, err return Authorization{}, err
} }
if ok { if ok {
// redis에 살아있다. // redis에 살아있다.
si, added, err := c.query_internal(sk) si, added, err := c.query_internal(sk)
if err != nil { if err != nil {
return nil, err return Authorization{}, err
} }
if si == nil { if si == nil {
return nil, nil return Authorization{}, nil
} }
if !added { if !added {
@ -277,8 +277,8 @@ func (c *consumer_redis) Touch(pk string) (*Authorization, error) {
c.add_internal(sk, si) c.add_internal(sk, si)
} }
return si.Authorization, nil return *si.Authorization, nil
} }
return nil, nil return Authorization{}, nil
} }