diff options
Diffstat (limited to 'nexus/sessions')
| -rw-r--r-- | nexus/sessions/defaults.go | 11 | ||||
| -rw-r--r-- | nexus/sessions/functions.go | 55 | ||||
| -rw-r--r-- | nexus/sessions/kv.go | 17 | ||||
| -rw-r--r-- | nexus/sessions/messages.go | 5 | ||||
| -rw-r--r-- | nexus/sessions/sessions.go | 36 |
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)
+}
|
