71 lines
1.5 KiB
Go
71 lines
1.5 KiB
Go
package middleware
|
|
|
|
import (
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/rs/xid"
|
|
"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()
|
|
}
|
|
|
|
// 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()
|
|
}
|