UNPKG

@httpc/kit

Version:

httpc toolbox for building function-based API with minimal code and end-to-end type safety

31 lines (30 loc) 1.46 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AuthorizationMiddleware = void 0; const tsyringe_1 = require("tsyringe"); const server_1 = require("@httpc/server"); const di_1 = require("../di"); const context_1 = require("./context"); const PermissionsAuthorizationService_1 = require("./PermissionsAuthorizationService"); function AuthorizationMiddleware(options) { const authorize = typeof options === "function" ? options : options?.onAuthorize || onAuthorize; if (typeof options === "object" && options.model) { tsyringe_1.container.registerSingleton((0, di_1.KEY)("IAuthorizationService"), PermissionsAuthorizationService_1.PermissionsAuthorizationService); tsyringe_1.container.registerInstance((0, di_1.KEY)("OPTIONS", PermissionsAuthorizationService_1.PermissionsAuthorizationService), { model: options.model, authorize: options.onAuthorize }); } return (0, server_1.PassthroughMiddleware)(async () => { const user = (0, context_1.useUser)("optional"); if (user) { (0, context_1.useAuthorization)(await authorize(user)); } }); } exports.AuthorizationMiddleware = AuthorizationMiddleware; async function onAuthorize(user) { const container = (0, di_1.useContainer)(); const auth = (0, di_1.RESOLVE)(container, "IAuthorizationService"); return await auth.authorize(user); }