diff --git a/pages/api/apps/index.ts b/pages/api/apps/index.ts deleted file mode 100644 index be14ad5..0000000 --- a/pages/api/apps/index.ts +++ /dev/null @@ -1,50 +0,0 @@ -import type { NextApiRequest, NextApiResponse } from 'next'; -import type { App, IdPMetadata } from '../../../types'; -import prisma from '../../../lib/prisma'; -import { createCertificate, createIdPMetadataXML } from '../../../utils'; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse -) { - - switch (req.method) { - case 'GET': - return await getAllApps(); - case 'POST': - return await createApp(); - default: - return res.status(405).end(`Method ${req.method} Not Allowed`); - } - - // Get all apps - async function getAllApps() { - const apps = await prisma.app.findMany(); - - return res.json(apps); - } - - // Create a new app - async function createApp() { - const { - name, - acs_url, - entity_id, - description = null, - } = req.body; - - const certificate = await createCertificate(); - - const app = await prisma.app.create({ - data: { - name, - acs_url, - entity_id, - description, - certificate, - } - }); - - return res.json(app); - } -} diff --git a/pages/api/apps/saml.ts b/pages/api/apps/saml.ts deleted file mode 100644 index 22534e8..0000000 --- a/pages/api/apps/saml.ts +++ /dev/null @@ -1,34 +0,0 @@ -import type { NextApiRequest, NextApiResponse } from 'next'; -import { User } from '../../../types'; -import { - createSAMLResponseXML, - extractSAMLRequestAttributes, -} from '../../../utils'; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse -) { - if (req.method === 'POST') { - return await response(req); - } - - if (req.method === 'GET') { - const user: User = { - id: '1', - email: 'kiran@demo.com', - firstName: 'Kiran', - lastName: 'K', - }; - - return res.status(200).json(await createSAMLResponseXML(user)); - } - - async function response(req: NextApiRequest) { - const { RelayState, SAMLRequest } = req.query; - - const attributes = await extractSAMLRequestAttributes(SAMLRequest); - - return res.status(200).json(attributes); - } -} diff --git a/pages/saml/index.tsx b/pages/saml/index.tsx deleted file mode 100644 index 39d263c..0000000 --- a/pages/saml/index.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import type { GetServerSideProps } from 'next'; -import React from "react"; -import { AuthNRequest } from '../../types' -import { extractSAMLRequestAttributes } from '../../utils' - -export const getServerSideProps: GetServerSideProps = async ({query, params}) => { - const relayState = query.RelayState as string; - const samlRequest = query.SAMLRequest as string; - - const attributes = await extractSAMLRequestAttributes(samlRequest); - - console.log(attributes) - - return { - props: { - relayState, - samlRequest, - }, - } -} - -const ProcessRequest: React.FC = ({relayState, samlRequest}) => { - return ( -
Process Request
- ); -} - -export default ProcessRequest; \ No newline at end of file diff --git a/pages/saml/sso.tsx b/pages/saml/sso.tsx index e69de29..308d49a 100644 --- a/pages/saml/sso.tsx +++ b/pages/saml/sso.tsx @@ -0,0 +1,30 @@ +import type { GetServerSideProps } from 'next'; +import React from "react"; +import { AuthNRequest } from '../../types' +import { extractSAMLRequestAttributes } from '../../utils' + +export const getServerSideProps: GetServerSideProps = async ({query, params}) => { + const relayState = query.RelayState as string; + const samlRequest = query.SAMLRequest as string; + + console.log({samlRequest}); + + const attributes = await extractSAMLRequestAttributes(samlRequest); + + console.log(attributes) + + return { + props: { + relayState, + samlRequest, + }, + } +} + +const ProcessRequest: React.FC = ({relayState, samlRequest}) => { + return ( +
Processing requjest...
+ ); +} + +export default ProcessRequest; \ No newline at end of file diff --git a/utils/index.ts b/utils/index.ts index 26dc92c..dfc5337 100644 --- a/utils/index.ts +++ b/utils/index.ts @@ -3,13 +3,19 @@ import { promises as fs } from 'fs'; import path from 'path'; import xml2js from 'xml2js'; import { User } from '../types'; -import config from '../lib/env'; -import * as rambda from 'rambda'; +import {promisify} from 'util'; +import zlib from 'zlib'; + +const inflateRawSync = promisify(zlib.inflateRawSync) // Parse XML const parseXML = (xml: string): Promise> => { return new Promise((resolve, reject) => { xml2js.parseString(xml, (err: Error, result: any) => { + if(err) { + reject(err); + } + resolve(result); }); }); @@ -17,15 +23,15 @@ const parseXML = (xml: string): Promise> => { // Parse SAMLRequest attributes const extractSAMLRequestAttributes = async (samlRequest: string) => { - // @ts-ignore - const result = await parseXML(Buffer.from(samlRequest, 'base64').toString()); - const attributes = result['samlp:AuthnRequest']['$']; + // const request = await inflateRawSync(Buffer.from(samlRequest, 'base64')).toString(); + // const result = await parseXML(request); + + // const attributes = result['samlp:AuthnRequest']['$']; return { - id: attributes['ID'], - issueInstant: attributes['IssueInstant'], - acsUrl: attributes['AssertionConsumerServiceURL'], - providerName: attributes['ProviderName'], + id: '123', + acsUrl: 'https://hookb.in/NOrYqkDLnXse8mNNlDXx', + providerName: 'BoxyHQ', }; };