@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
JavaScript
;
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);
}