heruvym/internal/utils/middleware/fiber_middleware.go

71 lines
1.5 KiB
Go
Raw Normal View History

package middleware
import (
"github.com/gofiber/fiber/v2"
"github.com/rs/xid"
2024-09-25 14:22:57 +00:00
"heruvym/internal/utils/jwt_adapter"
"strings"
"time"
)
func JwtPlug(c *fiber.Ctx) error {
adapter := &jwt_adapter.JwtAdapter{Id: "604b79aced1d431b9e911f56"}
adapter.SetUserID("604b79aced1d431b9e911f56")
c.Locals("adapter", adapter)
c.Locals("role", "admin")
return c.Next()
}
2024-09-25 10:18:19 +00:00
// todo оказывается то что и хттп я переписал, ну надо убрать потом думаю
func Jwt(c *fiber.Ctx) error {
var (
token, role string
adapter *jwt_adapter.JwtAdapter
err error
)
switch c.Get("Referer") {
case "admin.pena.digital":
role = "admin"
default:
role = "user"
}
c.Locals(jwt_adapter.RoleKey, role)
token = c.Cookies(jwt_adapter.DefaultHeaderKey)
if token == "" {
token = strings.Replace(c.Get(jwt_adapter.DefaultHeaderKey), "Bearer ", "", -1)
}
// Если jwt не обнаружен, ищем sessionKey
token = c.Get(sessionKey)
if token == "" {
session := c.Cookies(sessionKey)
if token == "" {
id := xid.New().String()
adapter = &jwt_adapter.JwtAdapter{Id: id}
c.Cookie(&fiber.Cookie{
Name: sessionKey,
Value: id,
Expires: time.Now().Add(time.Hour * 24 * 30),
})
} else {
adapter = &jwt_adapter.JwtAdapter{Id: session}
}
} else {
adapter, err = jwt_adapter.Decode(token)
}
if err != nil {
return c.SendStatus(fiber.StatusUnauthorized)
}
c.Locals("adapter", adapter)
return c.Next()
}