import {getDatabase, createOptions} from "@vostro/c2-utils/lib/database"; import {buildPermissionSetForRole} from "./permissions"; import chains from "@vostro/c2-engine/lib/chains"; import { Request, Response } from "express"; import { C2Utils } from '@vostro/c2-utils/lib/types'; export async function createContext(req: Request, res: Response) : Promise { const db = await getDatabase(); const {Role} = db.models; let role, user = await (req as any).getUser(); if (user) { role = await user.getRole({override: true}); } else { const publicRoleOptions = await chains().execute("role.getPublicRoleOptions", { where: { name: "public", }, override: true, }, req, res); role = await Role.findOne(createOptions({}, publicRoleOptions)); } if (!role) { throw new Error("unable to continue no role is set"); } // role = await chains().execute("role.getRoleFromRequest", role, req, res); const permissions = await buildPermissionSetForRole(role, {}); return chains().execute("request.getContext", { getRequest: () => { return {req, res}; }, getUser: () => { return (req as any).getUser(); }, logout: () => { req.logOut(); (req as any).session.destroy(); }, login: (user: any) => { return (req as any).loginAsync(user); }, role, permissions, }); } export async function createServiceContext(role: any, defaults = {}) : Promise { const permissions = await buildPermissionSetForRole(role, {}); // const dataloaderContext = createDataloaderContext(db); return chains().execute("request.getServiceContext", Object.assign({}, defaults, { getRequest: () => { return {}; }, getUser: () => { return undefined; }, logout: () => { }, login: (user: any) => { }, role, permissions, override: true, })); }