http, websocket api handler 추가

This commit is contained in:
2023-09-19 18:50:17 +09:00
parent 1af5d72819
commit 49a3722a7e
5 changed files with 221 additions and 64 deletions

View File

@ -53,18 +53,23 @@ func (p *provider_redis) New(input *Authorization) (string, error) {
if err != nil {
return "", err
}
pk := storagekey_to_publickey(sk)
return string(storagekey_to_publickey(sk)), err
logger.Println("session provider new :", sk, pk)
return string(pk), err
}
func (p *provider_redis) Delete(account primitive.ObjectID) error {
prefix := account.Hex()
sks, err := p.redisClient.Keys(p.ctx, prefix+"*").Result()
if err != nil {
logger.Println("session provider delete :", sks, err)
return err
}
for _, sk := range sks {
logger.Println("session provider delete :", sk)
p.redisClient.Del(p.ctx, sk).Result()
p.redisClient.Publish(p.ctx, p.deleteChannel, sk).Result()
}
@ -76,29 +81,38 @@ 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 {
logger.Println("session provider query :", pk, err)
return Authorization{}, nil
} else if err != nil {
logger.Println("session provider query :", pk, err)
return Authorization{}, err
}
var auth Authorization
if err := json.Unmarshal([]byte(payload), &auth); err != nil {
logger.Println("session provider query :", pk, err)
return Authorization{}, err
}
logger.Println("session provider query :", pk, auth)
return auth, nil
}
func (p *provider_redis) Touch(pk string) (bool, error) {
sk := publickey_to_storagekey(publickey(pk))
ok, err := p.redisClient.Expire(p.ctx, string(sk), p.ttl).Result()
logger.Println("session provider touch :", pk)
if err == redis.Nil {
// 이미 만료됨
logger.Println("session consumer touch :", pk, err)
return false, nil
} else if err != nil {
logger.Println("consumer Touch :", err)
logger.Println("session consumer touch :", pk, err)
return false, err
}
logger.Println("session consumer touch :", pk)
return ok, nil
}
@ -223,16 +237,20 @@ func (c *consumer_redis) Query(pk string) (Authorization, error) {
sk := publickey_to_storagekey(publickey(pk))
si, _, err := c.query_internal(sk)
if err != nil {
logger.Println("session consumer query :", pk, err)
return Authorization{}, err
}
if si == nil {
logger.Println("session consumer query(si nil) :", pk, nil)
return Authorization{}, nil
}
if time.Now().After(si.expireAt) {
logger.Println("session consumer query(expired):", pk, nil)
return Authorization{}, nil
}
logger.Println("session consumer query :", pk)
return *si.Authorization, nil
}
@ -244,9 +262,11 @@ func (c *consumer_redis) Touch(pk string) (Authorization, error) {
sk := publickey_to_storagekey(publickey(pk))
ok, err := c.redisClient.Expire(c.ctx, string(sk), c.ttl).Result()
if err == redis.Nil {
logger.Println("session consumer touch :", pk, err)
return Authorization{}, nil
} else if err != nil {
logger.Println("consumer Touch :", err)
logger.Println("session consumer touch :", pk, err)
return Authorization{}, err
}
@ -254,10 +274,12 @@ func (c *consumer_redis) Touch(pk string) (Authorization, error) {
// redis에 살아있다.
si, added, err := c.query_internal(sk)
if err != nil {
logger.Println("session consumer touch(ok) :", pk, err)
return Authorization{}, err
}
if si == nil {
logger.Println("session consumer touch(ok, si nil) :", pk)
return Authorization{}, nil
}
@ -267,8 +289,10 @@ func (c *consumer_redis) Touch(pk string) (Authorization, error) {
c.add_internal(sk, si)
}
logger.Println("session consumer touch(ok) :", pk)
return *si.Authorization, nil
}
logger.Println("session consumer touch(!ok) :", pk)
return Authorization{}, nil
}