From 821dc5c639d8348c2108a7938df45c7fdcd671c0 Mon Sep 17 00:00:00 2001 From: mountain Date: Mon, 4 Sep 2023 14:35:33 +0900 Subject: [PATCH] =?UTF-8?q?session=20=EC=9D=B8=ED=84=B0=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=8A=A4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- session/common.go | 6 +++--- session/impl_mongo.go | 30 +++++++++++++++--------------- session/impl_redis.go | 34 +++++++++++++++++----------------- 3 files changed, 35 insertions(+), 35 deletions(-) diff --git a/session/common.go b/session/common.go index 16eddf3..e352115 100644 --- a/session/common.go +++ b/session/common.go @@ -30,13 +30,13 @@ type Authorization struct { type Provider interface { New(*Authorization) (string, error) Delete(primitive.ObjectID) error - Query(string) (*Authorization, error) + Query(string) (Authorization, error) Touch(string) (bool, error) } type Consumer interface { - Query(string) (*Authorization, error) - Touch(string) (*Authorization, error) + Query(string) (Authorization, error) + Touch(string) (Authorization, error) } type storagekey string diff --git a/session/impl_mongo.go b/session/impl_mongo.go index d85d05f..096681b 100644 --- a/session/impl_mongo.go +++ b/session/impl_mongo.go @@ -67,14 +67,14 @@ func (p *provider_mongo) Delete(acc primitive.ObjectID) error { 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)) var auth Authorization err := p.mongoClient.FindOneAs(session_collection_name, bson.M{ "key": sk, }, &auth) - return &auth, err + return auth, err } 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 } -func (c *consumer_mongo) Query(pk string) (*Authorization, error) { +func (c *consumer_mongo) Query(pk string) (Authorization, error) { c.lock.Lock() defer c.lock.Unlock() sk := publickey_to_storagekey(publickey(pk)) si, _, err := c.query_internal(sk) if err != nil { - return nil, err + return Authorization{}, err } if si == nil { - return nil, nil + return Authorization{}, nil } 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() defer c.lock.Unlock() @@ -287,21 +287,21 @@ func (c *consumer_mongo) Touch(pk string) (*Authorization, error) { if err != nil { logger.Println("consumer Touch :", err) - return nil, err + return Authorization{}, err } if !worked { // 이미 만료되서 사라짐 - return nil, nil + return Authorization{}, nil } si, added, err := c.query_internal(sk) if err != nil { - return nil, err + return Authorization{}, err } if si == nil { - return nil, nil + return Authorization{}, nil } if !added { @@ -312,18 +312,18 @@ func (c *consumer_mongo) Touch(pk string) (*Authorization, error) { if err != nil { logger.Println("consumer Query :", err) - return nil, err + return Authorization{}, err } if len(si.Key) > 0 { c.add_internal(sk, &doc) 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) { diff --git a/session/impl_redis.go b/session/impl_redis.go index 9c03c50..61ee10e 100644 --- a/session/impl_redis.go +++ b/session/impl_redis.go @@ -70,21 +70,21 @@ func (p *provider_redis) Delete(account primitive.ObjectID) error { 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)) payload, err := p.redisClient.Get(p.ctx, string(sk)).Result() if err == redis.Nil { - return nil, nil + return Authorization{}, nil } else if err != nil { - return nil, err + return Authorization{}, err } var auth Authorization 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) { @@ -226,49 +226,49 @@ func (c *consumer_redis) query_internal(sk storagekey) (*sessionRedis, bool, err 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() defer c.lock.Unlock() sk := publickey_to_storagekey(publickey(pk)) si, _, err := c.query_internal(sk) if err != nil { - return nil, err + return Authorization{}, err } if si == nil { - return nil, nil + return Authorization{}, nil } 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() defer c.lock.Unlock() sk := publickey_to_storagekey(publickey(pk)) ok, err := c.redisClient.Expire(c.ctx, string(sk), c.ttl).Result() if err == redis.Nil { - return nil, nil + return Authorization{}, nil } else if err != nil { logger.Println("consumer Touch :", err) - return nil, err + return Authorization{}, err } if ok { // redis에 살아있다. si, added, err := c.query_internal(sk) if err != nil { - return nil, err + return Authorization{}, err } if si == nil { - return nil, nil + return Authorization{}, nil } if !added { @@ -277,8 +277,8 @@ func (c *consumer_redis) Touch(pk string) (*Authorization, error) { c.add_internal(sk, si) } - return si.Authorization, nil + return *si.Authorization, nil } - return nil, nil + return Authorization{}, nil }