116 lines
3.4 KiB
Go
116 lines
3.4 KiB
Go
package bcache
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"git.5iot.com/iotlcm-public/iotlcm-openapi/internal/consts"
|
|
"git.5iot.com/iotlcm-public/iotlcm-openapi/internal/library/cache"
|
|
"git.5iot.com/iotlcm-public/iotlcm-openapi/internal/library/mcache"
|
|
"time"
|
|
)
|
|
|
|
const apiAuthLocalBackfillTTL = 6 * time.Hour
|
|
|
|
// SetApiAuthToken 存储接口认证长令牌,先写本地内存缓存,再写共享缓存。
|
|
func SetApiAuthToken(ctx context.Context, uuid string, token string, timeout time.Duration) (err error) {
|
|
if uuid == "" {
|
|
return errors.New("api auth token uuid invalid")
|
|
}
|
|
key := fmt.Sprintf(consts.KeyApiAuthToken, uuid)
|
|
if err = mcache.Set(ctx, key, token, timeout); err != nil {
|
|
return err
|
|
}
|
|
if err = cache.Instance().Set(ctx, key, token, timeout); err != nil {
|
|
_ = mcache.Remove(ctx, key)
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetApiAuthToken 获取接口认证长令牌,优先读取本地内存缓存。
|
|
func GetApiAuthToken(ctx context.Context, uuid string) (token string, err error) {
|
|
if uuid == "" {
|
|
return "", errors.New("api auth token uuid invalid")
|
|
}
|
|
key := fmt.Sprintf(consts.KeyApiAuthToken, uuid)
|
|
t, err := mcache.Instance().Get(ctx, key)
|
|
if err == nil && !t.IsNil() {
|
|
return t.String(), nil
|
|
}
|
|
|
|
t, err = cache.Instance().Get(ctx, key)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
if !t.IsNil() {
|
|
_ = mcache.Set(ctx, key, t.String(), apiAuthLocalBackfillTTL)
|
|
return t.String(), nil
|
|
}
|
|
return "", errors.New("api auth token not found")
|
|
}
|
|
|
|
// DelApiAuthToken 删除接口认证长令牌,先删本地内存缓存,再删共享缓存。
|
|
func DelApiAuthToken(ctx context.Context, uuid string) (err error) {
|
|
if uuid == "" {
|
|
return errors.New("api auth token uuid invalid")
|
|
}
|
|
key := fmt.Sprintf(consts.KeyApiAuthToken, uuid)
|
|
if err = mcache.Remove(ctx, key); err != nil {
|
|
return err
|
|
}
|
|
_, err = cache.Instance().Remove(ctx, key)
|
|
return err
|
|
}
|
|
|
|
// SetApiAuthActiveToken 设置机构维度的当前有效令牌索引。
|
|
func SetApiAuthActiveToken(ctx context.Context, deptId int64, uuid string, timeout time.Duration) (err error) {
|
|
if deptId <= 0 || uuid == "" {
|
|
return errors.New("api auth active token key invalid")
|
|
}
|
|
key := fmt.Sprintf(consts.KeyApiAuthActiveToken, deptId)
|
|
if err = mcache.Set(ctx, key, uuid, timeout); err != nil {
|
|
return err
|
|
}
|
|
if err = cache.Instance().Set(ctx, key, uuid, timeout); err != nil {
|
|
_ = mcache.Remove(ctx, key)
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetApiAuthActiveToken 获取机构维度的当前有效令牌索引。
|
|
func GetApiAuthActiveToken(ctx context.Context, deptId int64) (uuid string, err error) {
|
|
if deptId <= 0 {
|
|
return "", errors.New("api auth active token key invalid")
|
|
}
|
|
key := fmt.Sprintf(consts.KeyApiAuthActiveToken, deptId)
|
|
t, err := mcache.Instance().Get(ctx, key)
|
|
if err == nil && !t.IsNil() {
|
|
return t.String(), nil
|
|
}
|
|
|
|
t, err = cache.Instance().Get(ctx, key)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
if !t.IsNil() {
|
|
_ = mcache.Set(ctx, key, t.String(), apiAuthLocalBackfillTTL)
|
|
return t.String(), nil
|
|
}
|
|
return "", errors.New("api auth active token not found")
|
|
}
|
|
|
|
// DelApiAuthActiveToken 删除机构维度的当前有效令牌索引。
|
|
func DelApiAuthActiveToken(ctx context.Context, deptId int64) (err error) {
|
|
if deptId <= 0 {
|
|
return errors.New("api auth active token key invalid")
|
|
}
|
|
key := fmt.Sprintf(consts.KeyApiAuthActiveToken, deptId)
|
|
if err = mcache.Remove(ctx, key); err != nil {
|
|
return err
|
|
}
|
|
_, err = cache.Instance().Remove(ctx, key)
|
|
return err
|
|
}
|