1
0
mirror of https://github.com/gofiber/fiber.git synced 2025-02-25 07:23:57 +00:00

70 lines
1.2 KiB
Go
Raw Normal View History

2020-11-06 19:43:57 +01:00
package session
2020-11-06 19:32:56 +01:00
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/internal/storage/memory"
2020-11-06 19:32:56 +01:00
)
2020-11-06 19:43:57 +01:00
type Store struct {
Config
2020-11-06 19:32:56 +01:00
}
2020-11-11 19:22:40 +01:00
// Storage ErrNotExist
var errNotExist = "key does not exist"
2020-11-06 19:43:57 +01:00
func New(config ...Config) *Store {
2020-11-11 14:03:16 +01:00
// Set default config
cfg := configDefault(config...)
2020-11-06 19:32:56 +01:00
2020-11-16 14:22:44 +01:00
if cfg.Storage == nil {
cfg.Storage = memory.New()
2020-11-06 19:32:56 +01:00
}
2020-11-16 14:22:44 +01:00
return &Store{
cfg,
}
2020-11-06 19:32:56 +01:00
}
2020-11-11 19:22:40 +01:00
func (s *Store) Get(c *fiber.Ctx) (*Session, error) {
2020-11-06 19:32:56 +01:00
var fresh bool
// Get key from cookie
2020-11-11 23:51:32 +01:00
id := c.Cookies(s.CookieName)
2020-11-06 19:32:56 +01:00
// If no key exist, create new one
2020-11-06 19:32:56 +01:00
if len(id) == 0 {
2020-11-06 19:43:57 +01:00
id = s.KeyGenerator()
2020-11-06 19:32:56 +01:00
fresh = true
}
// Create session object
2020-11-11 19:22:40 +01:00
sess := acquireSession()
sess.ctx = c
sess.config = s
sess.id = id
sess.fresh = fresh
2020-11-06 19:32:56 +01:00
// Fetch existing data
if !fresh {
raw, err := s.Storage.Get(id)
// Unmashal if we found data
if err == nil {
if _, err = sess.data.UnmarshalMsg(raw); err != nil {
2020-11-11 19:22:40 +01:00
return nil, err
2020-11-16 14:22:44 +01:00
}
sess.fresh = false
2020-11-23 08:44:34 +01:00
} else if raw != nil && err.Error() != "key does not exist" {
return nil, err
2020-11-16 14:22:44 +01:00
} else {
sess.fresh = true
2020-11-06 19:32:56 +01:00
}
}
2020-11-11 19:22:40 +01:00
return sess, nil
2020-11-06 19:32:56 +01:00
}
2020-11-13 18:30:14 +01:00
// Reset will delete all session from the storage
2020-11-06 19:43:57 +01:00
func (s *Store) Reset() error {
return s.Storage.Reset()
2020-11-06 19:32:56 +01:00
}