Files
astra-api-gateway/mw/jwt.go
2023-08-24 22:40:59 +03:00

36 lines
1.0 KiB
Go

package mw
import (
"astra-api-gateway/config"
"github.com/golang-jwt/jwt/v5"
"github.com/labstack/echo-jwt/v4"
"github.com/labstack/echo/v4"
"net/http"
"strings"
)
var JWT_MW = echojwt.WithConfig(echojwt.Config{
SigningKey: []byte(config.Env.Server.JWTSecret),
Skipper: func(c echo.Context) bool {
// Skip authentication for signup and login requests
if strings.Contains(c.Path(), "auth") || c.Path() == "/health" {
return true
}
if c.Request().Method == http.MethodOptions {
return true
}
return false
},
SuccessHandler: func(c echo.Context) {
user := c.Get("user").(*jwt.Token)
claims := user.Claims.(jwt.MapClaims)
c.Request().Header.Set("X-User-Id", claims["id"].(string))
c.Request().Header.Set("X-User-Role", claims["role"].(string))
c.Request().Header.Set("X-User-Organization-Id", claims["position_org_id"].(string))
c.Request().Header.Set("X-User-Right-Mask", claims["position_rm"].(string))
c.Request().Header.Set("X-User-Position", claims["position_name"].(string))
c.Request().Header.Del("Authorization")
},
})