package server import ( "code.smartsheep.studio/hydrogen/passport/pkg/security" "code.smartsheep.studio/hydrogen/passport/pkg/services" "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/middleware/keyauth" ) var auth = keyauth.New(keyauth.Config{ KeyLookup: "header:Authorization", AuthScheme: "Bearer", Validator: func(c *fiber.Ctx, token string) (bool, error) { claims, err := security.DecodeJwt(token) if err != nil { return false, err } session, err := services.LookupSessionWithToken(claims.ID) if err != nil { return false, err } else if err := session.IsAvailable(); err != nil { return false, err } user, err := services.GetAccount(session.AccountID) if err != nil { return false, err } c.Locals("principal", user) c.Locals("permissions", user.Permissions.Data()) return true, nil }, ContextKey: "token", })