From 465fa2f4d8e6b6958e9168aa4bfbddbecab6d846 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerg=C5=91=20Dulai?= Date: Fri, 2 Oct 2026 21:15:39 +0200 Subject: [PATCH] Add basic Session impl --- go.mod | 5 +++- go.sum | 2 ++ session/session.go | 63 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 session/session.go diff --git a/go.mod b/go.mod index 4a760b8..ede13b8 100644 --- a/go.mod +++ b/go.mod @@ -2,4 +2,7 @@ module git.gdulai.com/gdulai/rndr go 1.27.1 -require gitlab.com/gdulai/simpleloglvl v0.0.0-20260811205046-ece654ff6b31 +require ( + github.com/google/uuid v1.6.0 + gitlab.com/gdulai/simpleloglvl v0.0.0-20260811205046-ece654ff6b31 +) diff --git a/go.sum b/go.sum index de4a8ce..b2c025b 100644 --- a/go.sum +++ b/go.sum @@ -1,2 +1,4 @@ +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= gitlab.com/gdulai/simpleloglvl v0.0.0-20260811205046-ece654ff6b31 h1:vLRJpOsFrdXFjRHyhw2BluMslKv63jVvngc5HE/u/xM= gitlab.com/gdulai/simpleloglvl v0.0.0-20260811205046-ece654ff6b31/go.mod h1:H7XPunUrSyAvPa9nx8UbKnThEQJDmj3mdt+9ZtqDth4= diff --git a/session/session.go b/session/session.go new file mode 100644 index 0000000..96b7d54 --- /dev/null +++ b/session/session.go @@ -0,0 +1,63 @@ +package session + +import ( + "net/http" + + "github.com/google/uuid" + log "gitlab.com/gdulai/simpleloglvl" +) + +var sessions map[uuid.UUID]*Session + +func OpenSession() *Session { + newSessId, err := uuid.NewRandom() + if err != nil { + log.LogError("Failed to create new session id: %s", err) + return nil + } + return &Session{sessionID: newSessId} +} + +func GetSession(r *http.Request) *Session { + sessionIdCookie, err := r.Cookie("session_id") + if err != nil { + return nil + } + sessId, err := uuid.Parse(sessionIdCookie.Value) + if err == nil { + return nil + } + return sessions[sessId] +} + +type Session struct { + sessionID uuid.UUID + components map[uuid.UUID]any +} + +func (sess *Session) Close() { + delete(sessions, sess.sessionID) +} + +func (sess *Session) MangeComponent(component any) (uuid.UUID, error) { + newComponentId, err := uuid.NewRandom() + if err != nil { + return newComponentId, err + } + sess.components[newComponentId] = component + return newComponentId, nil +} + +func (sess *Session) RemoveComponent(componentId uuid.UUID) { + delete(sess.components, componentId) +} + +func (sess *Session) ID() uuid.UUID { + return sess.sessionID +} + +type RequestContext struct { + SessionID uuid.UUID + RequiestID uuid.UUID + Logger *log.GenericLogger +}