| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- package redis
- import (
- "context"
- "errors"
- "fmt"
- "fwh-toolbox-server/cache"
- "fwh-toolbox-server/domain"
- "strconv"
- "time"
- "golang.org/x/oauth2"
- )
- var (
- ctx = context.Background()
- )
- 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 := fmt.Sprintf("fwhtoolbox:session:%s", 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(ctx, key, fields); err != nil {
- return err
- }
- _, err := cache.ExpireAt(ctx, key, exp)
- return err
- }
- func GetSession(sid string) (*SessionInfo, error) {
- key := fmt.Sprintf("session:%s", sid)
- res, err := cache.HGetAll(ctx, 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 := fmt.Sprintf("session:%s", sid)
- return cache.Delete(ctx, key)
- }
|