summaryrefslogtreecommitdiff
path: root/nexus/sessions
diff options
context:
space:
mode:
authorBobby <[email protected]>2026-03-29 22:52:46 +0530
committerBobby <[email protected]>2026-03-29 22:52:46 +0530
commit9eb9b7f4bd552a641235764f66483e1f940fcfd9 (patch)
treeda520b923b5e6758d5457b6233dd6671fc640914 /nexus/sessions
parent65a143a0871c35989b7c7ea6723d39a0585c089e (diff)
downloadechoes-of-vaelun-main.tar.xz
echoes-of-vaelun-main.zip
feat: nexus account manager scaffold with auth, characters, realmsHEADmain
Diffstat (limited to 'nexus/sessions')
-rw-r--r--nexus/sessions/defaults.go11
-rw-r--r--nexus/sessions/functions.go55
-rw-r--r--nexus/sessions/kv.go17
-rw-r--r--nexus/sessions/messages.go5
-rw-r--r--nexus/sessions/sessions.go36
5 files changed, 124 insertions, 0 deletions
diff --git a/nexus/sessions/defaults.go b/nexus/sessions/defaults.go
new file mode 100644
index 0000000..b52f977
--- /dev/null
+++ b/nexus/sessions/defaults.go
@@ -0,0 +1,11 @@
+package sessions
+
+import "time"
+
+const (
+ LogPrefix = "Session"
+ SessionInterval = 10 * time.Second
+ SessionAccountIDKey = "account_id"
+ SessionFlashKey = "flash"
+ SessionLocalKey = "Session"
+)
diff --git a/nexus/sessions/functions.go b/nexus/sessions/functions.go
new file mode 100644
index 0000000..4baedb1
--- /dev/null
+++ b/nexus/sessions/functions.go
@@ -0,0 +1,55 @@
+package sessions
+
+import (
+ "nexus/utils/collections"
+
+ "github.com/gofiber/fiber/v2/middleware/session"
+ "github.com/google/uuid"
+)
+
+func CreateSession(sess *session.Session, accountID uuid.UUID) error {
+ return Set(sess, SessionAccountIDKey, accountID.String())
+}
+
+func DestroySession(sess *session.Session) error {
+ return Delete(sess, SessionAccountIDKey)
+}
+
+func GetSessionAccountID(sess *session.Session) (uuid.UUID, bool) {
+ value := Get(sess, SessionAccountIDKey)
+ if value == nil {
+ return uuid.Nil, false
+ }
+
+ str, ok := value.(string)
+ if !ok {
+ return uuid.Nil, false
+ }
+
+ id, err := uuid.Parse(str)
+ if err != nil {
+ return uuid.Nil, false
+ }
+
+ return id, true
+}
+
+func SetFlash(sess *session.Session, data collections.Record[string, any]) error {
+ return Set(sess, SessionFlashKey, data)
+}
+
+func GetFlash(sess *session.Session) collections.Record[string, any] {
+ value := Get(sess, SessionFlashKey)
+ if value == nil {
+ return nil
+ }
+ m, ok := value.(collections.Record[string, any])
+ if !ok {
+ return nil
+ }
+ return m
+}
+
+func ClearFlash(sess *session.Session) error {
+ return Delete(sess, SessionFlashKey)
+}
diff --git a/nexus/sessions/kv.go b/nexus/sessions/kv.go
new file mode 100644
index 0000000..cddc05f
--- /dev/null
+++ b/nexus/sessions/kv.go
@@ -0,0 +1,17 @@
+package sessions
+
+import "github.com/gofiber/fiber/v2/middleware/session"
+
+func Set(sess *session.Session, key string, value any) error {
+ sess.Set(key, value)
+ return sess.Save()
+}
+
+func Get(sess *session.Session, key string) any {
+ return sess.Get(key)
+}
+
+func Delete(sess *session.Session, key string) error {
+ sess.Delete(key)
+ return sess.Save()
+}
diff --git a/nexus/sessions/messages.go b/nexus/sessions/messages.go
new file mode 100644
index 0000000..47c0a24
--- /dev/null
+++ b/nexus/sessions/messages.go
@@ -0,0 +1,5 @@
+package sessions
+
+const (
+ SessionStoreInitialized = "Session store initialized with PostgreSQL"
+)
diff --git a/nexus/sessions/sessions.go b/nexus/sessions/sessions.go
new file mode 100644
index 0000000..be2e272
--- /dev/null
+++ b/nexus/sessions/sessions.go
@@ -0,0 +1,36 @@
+package sessions
+
+import (
+ "fmt"
+ "nexus/config"
+ "nexus/utils/logger"
+
+ "github.com/gofiber/fiber/v2/middleware/session"
+ "github.com/gofiber/storage/postgres/v3"
+)
+
+var Store *session.Store
+
+func init() {
+ storage := postgres.New(postgres.Config{
+ Host: config.Database.Host,
+ Port: config.Database.Port,
+ Username: config.Database.User,
+ Password: config.Database.Password,
+ Database: config.Database.Name,
+ Table: config.Session.CookieName,
+ Reset: false,
+ })
+
+ Store = session.New(session.Config{
+ Storage: storage,
+ KeyLookup: fmt.Sprintf("cookie:%s", config.Session.CookieName),
+ CookieDomain: config.Session.CookieDomain,
+ CookiePath: config.Session.CookiePath,
+ CookieSecure: config.Session.CookieSecure,
+ CookieHTTPOnly: true,
+ Expiration: config.Session.Timeout,
+ })
+
+ logger.Successf(LogPrefix, SessionStoreInitialized)
+}