70 lines
1.3 KiB
Go
70 lines
1.3 KiB
Go
![]() |
package middleware
|
||
|
|
||
|
import (
|
||
|
"github.com/gofiber/fiber/v2"
|
||
|
"github.com/rs/xid"
|
||
|
"heruvym/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()
|
||
|
}
|
||
|
|
||
|
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()
|
||
|
}
|