session 인터페이스 수정
This commit is contained in:
@ -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
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user