package session import ( "net/http" "github.com/google/uuid" log "gitlab.com/gdulai/simpleloglvl" ) var sessions map[uuid.UUID]*Session = make(map[uuid.UUID]*Session, 0) func OpenSession() *Session { newSessId, err := uuid.NewRandom() if err != nil { log.LogError("Failed to create new session id: %s", err) return nil } session := &Session{sessionID: newSessId} sessions[newSessId] = session return session } 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 }