45 lines
1.0 KiB
Go
45 lines
1.0 KiB
Go
package middlewares
|
|
|
|
import (
|
|
"backend/pkg/consts"
|
|
"backend/pkg/errorx"
|
|
|
|
"github.com/gofiber/fiber/v3"
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
func (f *Middlewares) ParseJWT(c fiber.Ctx) error {
|
|
tokens := c.GetReqHeaders()["Authorization"]
|
|
if len(tokens) == 0 {
|
|
return c.Next()
|
|
}
|
|
|
|
token := tokens[0]
|
|
claim, err := f.jwt.Parse(token)
|
|
if err != nil {
|
|
c.ClearCookie("token")
|
|
log.Errorf("failed to parse jwt from token: %s", token)
|
|
return errorx.RequestUnAuthorized
|
|
}
|
|
|
|
// query user
|
|
_, err = f.userSvc.GetByOpenID(c.Context(), claim.OpenID)
|
|
if err != nil {
|
|
log.Errorf("failed to get user by open id(%s) from token: %s", claim.OpenID, token)
|
|
c.ClearCookie("token")
|
|
return errorx.RequestUnAuthorized
|
|
}
|
|
|
|
_, err = f.userSvc.GetTenantBySlug(c.Context(), claim.Tenant)
|
|
if err != nil {
|
|
log.Errorf("failed to get tenant(%s) by from token: %s", claim.Tenant, token)
|
|
c.ClearCookie("token")
|
|
return errorx.RequestUnAuthorized
|
|
}
|
|
|
|
c.Locals(consts.CtxKeyJwt, token)
|
|
c.Locals(consts.CtxKeyClaim, claim)
|
|
|
|
return c.Next()
|
|
}
|