@httpc/kit
Version:
httpc toolbox for building function-based API with minimal code and end-to-end type safety
27 lines (26 loc) • 1.16 kB
JavaScript
import { container } from "tsyringe";
import { PassthroughMiddleware } from "@httpc/server";
import { KEY, RESOLVE, useContainer } from "../di";
import { useAuthorization, useUser } from "./context";
import { PermissionsAuthorizationService } from "./PermissionsAuthorizationService";
export function AuthorizationMiddleware(options) {
const authorize = typeof options === "function" ? options : options?.onAuthorize || onAuthorize;
if (typeof options === "object" && options.model) {
container.registerSingleton(KEY("IAuthorizationService"), PermissionsAuthorizationService);
container.registerInstance(KEY("OPTIONS", PermissionsAuthorizationService), {
model: options.model,
authorize: options.onAuthorize
});
}
return PassthroughMiddleware(async () => {
const user = useUser("optional");
if (user) {
useAuthorization(await authorize(user));
}
});
}
async function onAuthorize(user) {
const container = useContainer();
const auth = RESOLVE(container, "IAuthorizationService");
return await auth.authorize(user);
}