UNPKG

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