backend-server-v2/internal/http/middleware/auth.go

63 lines
1.2 KiB
Go

package middleware
import (
"errors"
"trustcontact/internal/models"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/session"
)
func RequireAuth() fiber.Handler {
return func(c *fiber.Ctx) error {
if _, ok := CurrentUserFromContext(c); !ok {
return c.Redirect("/login")
}
return c.Next()
}
}
func RequireAdmin() fiber.Handler {
return func(c *fiber.Ctx) error {
user, ok := CurrentUserFromContext(c)
if !ok {
return c.Redirect("/login")
}
if user.Role != models.RoleAdmin {
return c.Status(fiber.StatusForbidden).SendString("forbidden")
}
return c.Next()
}
}
func SetSessionUserID(c *fiber.Ctx, userID uint) error {
store, ok := c.Locals(contextStoreKey).(*session.Store)
if !ok || store == nil {
return errors.New("session store not available")
}
sess, err := store.Get(c)
if err != nil {
return err
}
sess.Set(sessionUserIDKey, userID)
return sess.Save()
}
func ClearSessionUser(c *fiber.Ctx) error {
store, ok := c.Locals(contextStoreKey).(*session.Store)
if !ok || store == nil {
return errors.New("session store not available")
}
sess, err := store.Get(c)
if err != nil {
return err
}
sess.Delete(sessionUserIDKey)
return sess.Save()
}