Initial Codebase (untested)
This commit is contained in:
67
internal/session/session.go
Normal file
67
internal/session/session.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package session
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Map ...
|
||||
type Map map[string]string
|
||||
|
||||
// Session ...
|
||||
type Session struct {
|
||||
store Store
|
||||
|
||||
ID string `json:"id"`
|
||||
Data Map `json:"data"`
|
||||
CreatedAt time.Time `json:"created"`
|
||||
ExpiresAt time.Time `json:"expires"`
|
||||
}
|
||||
|
||||
func NewSession(store Store) *Session {
|
||||
return &Session{store: store}
|
||||
}
|
||||
|
||||
func LoadSession(data []byte, sess *Session) error {
|
||||
if err := json.Unmarshal(data, &sess); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if sess.Data == nil {
|
||||
sess.Data = make(Map)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (sess *Session) Expired() bool {
|
||||
return sess.ExpiresAt.Before(time.Now())
|
||||
}
|
||||
|
||||
func (sess *Session) Set(key, val string) error {
|
||||
sess.Data[key] = val
|
||||
return sess.store.SyncSession(sess)
|
||||
}
|
||||
|
||||
func (sess *Session) Get(key string) (val string, ok bool) {
|
||||
val, ok = sess.Data[key]
|
||||
return
|
||||
}
|
||||
|
||||
func (sess *Session) Has(key string) bool {
|
||||
_, ok := sess.Data[key]
|
||||
return ok
|
||||
}
|
||||
|
||||
func (sess *Session) Del(key string) error {
|
||||
delete(sess.Data, key)
|
||||
return sess.store.SyncSession(sess)
|
||||
}
|
||||
|
||||
func (sess *Session) Bytes() ([]byte, error) {
|
||||
data, err := json.Marshal(sess)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
Reference in New Issue
Block a user