jackson/ee/federated-saml/api/admin/index.ts

60 lines
1.5 KiB
TypeScript

import type { NextApiRequest, NextApiResponse } from 'next';
import jackson from '@lib/jackson';
import retraced from '@ee/retraced';
import { defaultHandler } from '@lib/api';
import { parsePaginateApiParams } from '@lib/utils';
import { validateDevelopmentModeLimits } from '@lib/development-mode';
const handler = async (req: NextApiRequest, res: NextApiResponse) => {
await defaultHandler(req, res, {
GET: handleGET,
POST: handlePOST,
});
};
// Create new Identity Federation app
const handlePOST = async (req: NextApiRequest, res: NextApiResponse) => {
const { samlFederatedController } = await jackson();
await validateDevelopmentModeLimits(
req.body.product,
'samlFederation',
'Maximum number of federation apps reached'
);
const app = await samlFederatedController.app.create(req.body);
retraced.reportAdminPortalEvent({
action: 'federation.app.create',
crud: 'c',
req,
target: {
id: app.id,
},
});
res.status(201).json({ data: app });
};
// Get Identity Federation apps
const handleGET = async (req: NextApiRequest, res: NextApiResponse) => {
const { samlFederatedController } = await jackson();
const { pageOffset, pageLimit, pageToken } = parsePaginateApiParams(req.query);
const apps = await samlFederatedController.app.getAll({
pageOffset,
pageLimit,
pageToken,
});
if (apps.pageToken) {
res.setHeader('jackson-pagetoken', apps.pageToken);
}
res.json({ data: apps.data });
};
export default handler;