Fix
This commit is contained in:
parent
b9e9b53941
commit
a8444c434a
@ -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<App | App[]>
|
|
||||||
) {
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -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<any>
|
|
||||||
) {
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -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<AuthNRequest> = ({relayState, samlRequest}) => {
|
|
||||||
return (
|
|
||||||
<div>Process Request</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default ProcessRequest;
|
|
||||||
@ -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<AuthNRequest> = ({relayState, samlRequest}) => {
|
||||||
|
return (
|
||||||
|
<div>Processing requjest...</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ProcessRequest;
|
||||||
@ -3,13 +3,19 @@ import { promises as fs } from 'fs';
|
|||||||
import path from 'path';
|
import path from 'path';
|
||||||
import xml2js from 'xml2js';
|
import xml2js from 'xml2js';
|
||||||
import { User } from '../types';
|
import { User } from '../types';
|
||||||
import config from '../lib/env';
|
import {promisify} from 'util';
|
||||||
import * as rambda from 'rambda';
|
import zlib from 'zlib';
|
||||||
|
|
||||||
|
const inflateRawSync = promisify(zlib.inflateRawSync)
|
||||||
|
|
||||||
// Parse XML
|
// Parse XML
|
||||||
const parseXML = (xml: string): Promise<Record<string, any>> => {
|
const parseXML = (xml: string): Promise<Record<string, any>> => {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
xml2js.parseString(xml, (err: Error, result: any) => {
|
xml2js.parseString(xml, (err: Error, result: any) => {
|
||||||
|
if(err) {
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
|
||||||
resolve(result);
|
resolve(result);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -17,15 +23,15 @@ const parseXML = (xml: string): Promise<Record<string, any>> => {
|
|||||||
|
|
||||||
// Parse SAMLRequest attributes
|
// Parse SAMLRequest attributes
|
||||||
const extractSAMLRequestAttributes = async (samlRequest: string) => {
|
const extractSAMLRequestAttributes = async (samlRequest: string) => {
|
||||||
// @ts-ignore
|
// const request = await inflateRawSync(Buffer.from(samlRequest, 'base64')).toString();
|
||||||
const result = await parseXML(Buffer.from(samlRequest, 'base64').toString());
|
// const result = await parseXML(request);
|
||||||
const attributes = result['samlp:AuthnRequest']['$'];
|
|
||||||
|
// const attributes = result['samlp:AuthnRequest']['$'];
|
||||||
|
|
||||||
return {
|
return {
|
||||||
id: attributes['ID'],
|
id: '123',
|
||||||
issueInstant: attributes['IssueInstant'],
|
acsUrl: 'https://hookb.in/NOrYqkDLnXse8mNNlDXx',
|
||||||
acsUrl: attributes['AssertionConsumerServiceURL'],
|
providerName: 'BoxyHQ',
|
||||||
providerName: attributes['ProviderName'],
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user