| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package redis
- import (
- "context"
- "errors"
- "fwh-toolbox-server/cache"
- "fwh-toolbox-server/domain"
- "strconv"
- "time"
- "go.uber.org/zap"
- "golang.org/x/oauth2"
- )
- var (
- authCtx = context.Background()
- authKeyPrefix = "fwhtoolbox:session:"
- )
- type SessionInfo struct {
- AccessToken string `json:"access_token"`
- RefreshToken string `json:"refresh_token"`
- AccessExp int64 `json:"access_exp"`
- }
- func StoreSession(sid string, token *oauth2.Token) error {
- key := authKeyPrefix + sid
- exp := time.Now().Add(domain.SessionTTL)
- accessExp := time.Now().Add(time.Duration(token.ExpiresIn) * time.Second).Unix()
- fields := map[string]interface{}{
- "refresh_token": token.RefreshToken,
- "access_token": token.AccessToken,
- "access_exp": accessExp,
- }
- if err := cache.HSet(authCtx, key, fields); err != nil {
- zap.L().Error("HSet failed", zap.String("key", key), zap.Any("fields", fields), zap.String("err", err.Error()))
- return err
- }
- _, err := cache.ExpireAt(authCtx, key, exp)
- return err
- }
- func GetSession(sid string) (*SessionInfo, error) {
- key := authKeyPrefix + sid
- res, err := cache.HGetAll(authCtx, key)
- if err != nil {
- return nil, err
- }
- if len(res) == 0 {
- return nil, errors.New("no session")
- }
- accessToken := res["access_token"]
- refreshToken := res["refresh_token"]
- accessExpStr := res["access_exp"]
- var accessExp int64
- if accessExpStr != "" {
- accessExp, err = strconv.ParseInt(accessExpStr, 10, 64)
- if err != nil {
- return nil, err
- }
- }
- return &SessionInfo{
- AccessToken: accessToken,
- RefreshToken: refreshToken,
- AccessExp: accessExp,
- }, nil
- }
- func DeleteSession(sid string) error {
- key := authKeyPrefix + sid
- return cache.Delete(authCtx, key)
- }
|