summaryrefslogtreecommitdiff
path: root/session
diff options
context:
space:
mode:
authorBobby <[email protected]>2026-01-20 14:22:24 +0530
committerBobby <[email protected]>2026-01-20 14:22:24 +0530
commit2a513445a50bbe0d3a5cb13784c8ed68e1c367fa (patch)
treeda67de8714927f523612882f0ba4787d94efa078 /session
parenta04faab2a7c031b95e6e7553f9921c3bada2bc08 (diff)
downloadcafe-2a513445a50bbe0d3a5cb13784c8ed68e1c367fa.tar.xz
cafe-2a513445a50bbe0d3a5cb13784c8ed68e1c367fa.zip
Add session management with PostgreSQL storage and utility functions
Diffstat (limited to 'session')
-rw-r--r--session/functions.go27
-rw-r--r--session/kv.go32
-rw-r--r--session/session.go45
3 files changed, 104 insertions, 0 deletions
diff --git a/session/functions.go b/session/functions.go
new file mode 100644
index 0000000..286ebbb
--- /dev/null
+++ b/session/functions.go
@@ -0,0 +1,27 @@
+package session
+
+import "github.com/gofiber/fiber/v2"
+
+const userIDKey = "user_id"
+
+func CreateSession(ctx *fiber.Ctx, userID uint) error {
+ return Set(ctx, userIDKey, userID)
+}
+
+func DestroySession(ctx *fiber.Ctx) error {
+ return Delete(ctx, userIDKey)
+}
+
+func GetSessionUserID(ctx *fiber.Ctx) (uint, error) {
+ value, err := Get(ctx, userIDKey)
+ if err != nil || value == nil {
+ return 0, err
+ }
+
+ userID, ok := value.(uint)
+ if !ok {
+ return 0, nil
+ }
+
+ return userID, nil
+}
diff --git a/session/kv.go b/session/kv.go
new file mode 100644
index 0000000..eecd4c5
--- /dev/null
+++ b/session/kv.go
@@ -0,0 +1,32 @@
+package session
+
+import "github.com/gofiber/fiber/v2"
+
+func Set(ctx *fiber.Ctx, key string, value any) error {
+ sess, err := Store.Get(ctx)
+ if err != nil {
+ return err
+ }
+
+ sess.Set(key, value)
+ return sess.Save()
+}
+
+func Get(ctx *fiber.Ctx, key string) (any, error) {
+ sess, err := Store.Get(ctx)
+ if err != nil {
+ return nil, err
+ }
+
+ return sess.Get(key), nil
+}
+
+func Delete(ctx *fiber.Ctx, key string) error {
+ sess, err := Store.Get(ctx)
+ if err != nil {
+ return err
+ }
+
+ sess.Delete(key)
+ return sess.Save()
+}
diff --git a/session/session.go b/session/session.go
new file mode 100644
index 0000000..4a4e0b8
--- /dev/null
+++ b/session/session.go
@@ -0,0 +1,45 @@
+package session
+
+import (
+ "cafe/config"
+ "encoding/gob"
+ "fmt"
+ "log"
+ "time"
+
+ "github.com/gofiber/fiber/v2"
+ "github.com/gofiber/fiber/v2/middleware/session"
+ "github.com/gofiber/storage/postgres/v3"
+)
+
+var Store *session.Store
+
+func init() {
+ gob.Register(fiber.Map{})
+ log.Println("gob: registered fiber.Map for session storage")
+
+ storage := postgres.New(postgres.Config{
+ Host: config.Database.Host,
+ Port: config.Database.Port,
+ Username: config.Database.Username,
+ Password: config.Database.Password,
+ Database: config.Database.Name,
+ Table: config.Session.CookieName,
+ Reset: false,
+ SSLMode: config.Database.SSLMode,
+ GCInterval: 10 * time.Second,
+ })
+
+ Store = session.New(session.Config{
+ Storage: storage,
+ Expiration: config.Session.CookieTimeout,
+ KeyLookup: fmt.Sprintf("cookie:%s", config.Session.CookieName),
+ CookieDomain: config.Session.CookieDomain,
+ CookiePath: config.Session.CookiePath,
+ CookieSecure: config.Session.CookieSecure,
+ CookieSameSite: config.Session.CookieSameSite,
+ CookieHTTPOnly: true,
+ })
+
+ log.Println("session storage initialized")
+}