verae-middleware/src/routes/tenantRoutes.js

46 lines
1.1 KiB
JavaScript

/**
* @module routes/tenantRoutes
*/
import { Router } from 'express';
import { asyncHandler, AppError } from '../errors.js';
import {
selfServeSignup,
provisionTenant,
listProvisionedTenants,
} from '../services/tenantService.js';
import { config } from '../config.js';
export const publicTenantRoutes = Router();
export const adminTenantRoutes = Router();
publicTenantRoutes.post(
'/signup',
asyncHandler(async (req, res) => {
const result = await selfServeSignup(req.body ?? {});
res.status(201).json(result);
}),
);
adminTenantRoutes.use((req, _res, next) => {
const secret = req.headers['x-admin-secret'];
if (secret !== config.adminSecret) {
return next(new AppError('Invalid admin secret', { status: 403, code: 'FORBIDDEN' }));
}
next();
});
adminTenantRoutes.post(
'/tenants',
asyncHandler(async (req, res) => {
const result = await provisionTenant(req.body ?? {});
res.status(201).json(result);
}),
);
adminTenantRoutes.get(
'/tenants',
asyncHandler(async (_req, res) => {
res.json({ tenants: listProvisionedTenants() });
}),
);