dashboard-v2/app/http/session/redisstore.go
2021-09-03 11:44:12 +01:00

54 lines
1.1 KiB
Go

package session
import (
"encoding/json"
"errors"
"fmt"
wrapper "github.com/TicketsBot/GoPanel/redis"
"github.com/go-redis/redis/v8"
)
var ErrNoSession = errors.New("no session data found")
type RedisStore struct {
client *redis.Client
}
func NewRedisStore() *RedisStore {
return &RedisStore{
client: wrapper.Client.Client,
}
}
var keyPrefix = "panel:session:"
func (s *RedisStore) Get(userId uint64) (SessionData, error) {
raw, err := s.client.Get(wrapper.DefaultContext(), fmt.Sprintf("%s:%d", keyPrefix, userId)).Result()
if err != nil {
if err == redis.Nil {
err = ErrNoSession
}
return SessionData{}, err
}
var data SessionData
if err := json.Unmarshal([]byte(raw), &data); err != nil {
return SessionData{}, err
}
return data, nil
}
func (s *RedisStore) Set(userId uint64, data SessionData) error {
encoded, err := json.Marshal(data)
if err != nil {
return err
}
return s.client.Set(wrapper.DefaultContext(), fmt.Sprintf("%s:%d", keyPrefix, userId), encoded, 0).Err()
}
func (s *RedisStore) Clear(userId uint64) error {
return s.client.Del(wrapper.DefaultContext(), fmt.Sprintf("%s:%d", keyPrefix, userId)).Err()
}