aboutsummaryrefslogtreecommitdiff
path: root/src/sessions/sessions.go
diff options
context:
space:
mode:
authorAlexander Kavon <hawk@alexkavon.com>2023-11-30 05:21:38 -0500
committerAlexander Kavon <hawk@alexkavon.com>2023-11-30 05:21:38 -0500
commitec1f49a98765800481608394af3feb5a5221110c (patch)
treea9e1843c7b79a5c111d5fb18c7c336068479eb55 /src/sessions/sessions.go
parent218cd643550ed00d26b6e9772d8a64875b5abf2e (diff)
adjusted session store to only require library and returnable session object
Diffstat (limited to 'src/sessions/sessions.go')
-rw-r--r--src/sessions/sessions.go46
1 files changed, 36 insertions, 10 deletions
diff --git a/src/sessions/sessions.go b/src/sessions/sessions.go
index d2acab6..34fe91c 100644
--- a/src/sessions/sessions.go
+++ b/src/sessions/sessions.go
@@ -2,22 +2,24 @@ package sessions
import (
"net/http"
+ "sync"
"github.com/google/uuid"
)
-type SessionMgr struct {
- key string
- Values map[string]string
-}
+type sessionvalues map[string]any
-type session map[string]any
+type Session struct {
+ id string
+ values sessionvalues
+ mu *sync.Mutex
+}
type SessionCtxKey string
-var sessions map[string]session
+var _sessions map[string]Session
-func (sm *SessionMgr) NewSession(w http.ResponseWriter, r http.Request) {
+func NewSession(w http.ResponseWriter, values map[string]any) Session {
token := uuid.NewString()
// set secure cookie in http.ResponseWriter
@@ -27,9 +29,33 @@ func (sm *SessionMgr) NewSession(w http.ResponseWriter, r http.Request) {
Value: token,
})
- sessions[token] = session{
- "username": username,
+ // create session and store
+ s := Session{
+ id: token,
+ values: sessionvalues(values),
}
- // set request context
+ _sessions[token] = s
+ return s
+}
+
+func GetSession(id string) (Session, bool) {
+ s, ok := _sessions[id]
+ return s, ok
+}
+
+func (s *Session) Id() string {
+ return s.id
+}
+
+func (s *Session) Get(key string) interface{} {
+ s.mu.Lock()
+ defer s.mu.Unlock()
+ return s.values[key]
+}
+func (s *Session) Set(key string, value interface{}) bool {
+ s.mu.Lock()
+ defer s.mu.Unlock()
+ s.values[key] = value
+ return true
}