2022-02-21 05:52:12 +00:00
|
|
|
import type { NextApiRequest, NextApiResponse } from 'next';
|
2022-02-22 08:16:54 +00:00
|
|
|
import { extractSAMLRequestAttributes } from 'utils';
|
2022-02-21 05:52:12 +00:00
|
|
|
|
2022-02-22 05:36:06 +00:00
|
|
|
export default async function handler(req: NextApiRequest, res: NextApiResponse<string>) {
|
2022-02-21 05:52:12 +00:00
|
|
|
switch (req.method) {
|
|
|
|
|
case 'GET':
|
|
|
|
|
return await processSAMLRequest();
|
|
|
|
|
default:
|
|
|
|
|
return res.status(405).end(`Method ${req.method} Not Allowed`);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function processSAMLRequest() {
|
|
|
|
|
const relayState = <string>req.query.RelayState;
|
|
|
|
|
const samlRequest = <string>req.query.SAMLRequest;
|
2022-02-23 13:48:20 +00:00
|
|
|
|
2022-02-22 08:16:54 +00:00
|
|
|
try {
|
|
|
|
|
const { id, audience, acsUrl, providerName } = await extractSAMLRequestAttributes(samlRequest);
|
|
|
|
|
const params = new URLSearchParams({ id, audience, acsUrl, providerName, relayState });
|
2022-02-23 13:48:20 +00:00
|
|
|
|
2022-02-22 10:20:13 +00:00
|
|
|
res.redirect(302, `/saml/login?${params.toString()}`);
|
2022-02-22 08:16:54 +00:00
|
|
|
} catch (err) {
|
|
|
|
|
console.error(err);
|
2022-02-23 13:48:20 +00:00
|
|
|
|
2022-02-22 08:16:54 +00:00
|
|
|
res.status(500).send(`Error parsing SAML request`);
|
|
|
|
|
}
|
2022-02-21 05:52:12 +00:00
|
|
|
}
|
2022-02-22 05:36:06 +00:00
|
|
|
}
|