From cb8b857008c326ab73a084363852a032cd7ce483 Mon Sep 17 00:00:00 2001 From: Kiran Date: Tue, 22 Feb 2022 11:44:12 +0530 Subject: [PATCH] Applied prettier --- pages/_app.tsx | 6 ++-- pages/_document.tsx | 16 ++++------ pages/api/saml/auth.ts | 6 ++-- pages/saml/sso.tsx | 15 ++++----- utils/certificate.ts | 8 ++--- utils/idp.ts | 6 ++-- utils/index.ts | 2 +- utils/request.ts | 16 +++++----- utils/response.ts | 70 ++++++++++++++++++++++-------------------- 9 files changed, 66 insertions(+), 79 deletions(-) diff --git a/pages/_app.tsx b/pages/_app.tsx index 46ea5dd..0aa1cbb 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -1,6 +1,6 @@ -import "styles/globals.css"; -import type { AppProps } from "next/app"; -import Layout from "components/Layout"; +import 'styles/globals.css'; +import type { AppProps } from 'next/app'; +import Layout from 'components/Layout'; function MyApp({ Component, pageProps }: AppProps) { return ( diff --git a/pages/_document.tsx b/pages/_document.tsx index c045cfd..9c030f6 100644 --- a/pages/_document.tsx +++ b/pages/_document.tsx @@ -1,22 +1,18 @@ -import Document, { Html, Head, Main, NextScript } from "next/document"; +import Document, { Html, Head, Main, NextScript } from 'next/document'; class MyDocument extends Document { render() { return ( - + + - - +
diff --git a/pages/api/saml/auth.ts b/pages/api/saml/auth.ts index 67bf527..dfecd8a 100644 --- a/pages/api/saml/auth.ts +++ b/pages/api/saml/auth.ts @@ -1,8 +1,8 @@ -import type { NextApiRequest, NextApiResponse } from "next"; +import type { NextApiRequest, NextApiResponse } from 'next'; export async function handler(req: NextApiRequest, res: NextApiResponse) { - if (req.method === "POST") { - res.status(200).json({ name: "John Doe" }); + if (req.method === 'POST') { + res.status(200).json({ name: 'John Doe' }); } else { res.status(405).send(`Method ${req.method} Not Allowed`); } diff --git a/pages/saml/sso.tsx b/pages/saml/sso.tsx index 1143e66..b8bde97 100644 --- a/pages/saml/sso.tsx +++ b/pages/saml/sso.tsx @@ -1,13 +1,10 @@ import type { GetServerSideProps } from 'next'; -import React from "react"; -import { AuthNRequest } from '../../types' -import { extractSAMLRequestAttributes, createResponseForm } from '../../utils' +import React from 'react'; +import { AuthNRequest } from '../../types'; +import { extractSAMLRequestAttributes, createResponseForm } from '../../utils'; -const ProcessRequest: React.FC = ({relayState, samlRequest}) => { - return ( -
Processing request
- ); -} +const ProcessRequest: React.FC = ({ relayState, samlRequest }) => { + return
Processing request
; +}; export default ProcessRequest; - diff --git a/utils/certificate.ts b/utils/certificate.ts index 30b24fe..a3623a8 100644 --- a/utils/certificate.ts +++ b/utils/certificate.ts @@ -7,7 +7,7 @@ const fetchPublicKey = async (): Promise => { const fetchPrivateKey = async (): Promise => { return await fs.readFile(path.join('data', 'key.pem'), 'ascii'); -} +}; const stripCertHeaderAndFooter = (cert: string): string => { cert = cert.replace(/-+BEGIN CERTIFICATE-+\r?\n?/, ''); @@ -17,8 +17,4 @@ const stripCertHeaderAndFooter = (cert: string): string => { return cert; }; -export { - fetchPublicKey, - fetchPrivateKey, - stripCertHeaderAndFooter, -} \ No newline at end of file +export { fetchPublicKey, fetchPrivateKey, stripCertHeaderAndFooter }; diff --git a/utils/idp.ts b/utils/idp.ts index b83bb91..7bf0d66 100644 --- a/utils/idp.ts +++ b/utils/idp.ts @@ -13,7 +13,7 @@ const createIdPMetadataXML = async ({ }): Promise => { const xmlPath = path.join('data', 'idp-metadata.xml'); const xml = await fs.readFile(xmlPath, 'utf8'); - certificate = stripCertHeaderAndFooter(certificate) + certificate = stripCertHeaderAndFooter(certificate); return xml .replace('idp_entity_id', idpEntityId) @@ -21,6 +21,4 @@ const createIdPMetadataXML = async ({ .replace(/idp_sso_url/g, idpSsoUrl); }; -export { - createIdPMetadataXML, -} \ No newline at end of file +export { createIdPMetadataXML }; diff --git a/utils/index.ts b/utils/index.ts index cb79829..943cb83 100644 --- a/utils/index.ts +++ b/utils/index.ts @@ -1,4 +1,4 @@ export * from './certificate'; export * from './request'; export * from './response'; -export * from './idp'; \ No newline at end of file +export * from './idp'; diff --git a/utils/request.ts b/utils/request.ts index fd63f42..b7cd78c 100644 --- a/utils/request.ts +++ b/utils/request.ts @@ -1,6 +1,6 @@ -import xml2js from "xml2js"; -import { promisify } from "util"; -import { inflateRaw } from "zlib"; +import xml2js from 'xml2js'; +import { promisify } from 'util'; +import { inflateRaw } from 'zlib'; const inflateRawAsync = promisify(inflateRaw); @@ -19,18 +19,16 @@ const parseXML = (xml: string): Promise> => { // Parse SAMLRequest attributes const extractSAMLRequestAttributes = async (samlRequest: string) => { - const request = ( - await inflateRawAsync(Buffer.from(samlRequest, "base64")) - ).toString(); + const request = (await inflateRawAsync(Buffer.from(samlRequest, 'base64'))).toString(); const result = await parseXML(request); - const attributes = result["samlp:AuthnRequest"]["$"]; - const issuer = result["samlp:AuthnRequest"]["saml:Issuer"]; + const attributes = result['samlp:AuthnRequest']['$']; + const issuer = result['samlp:AuthnRequest']['saml:Issuer']; return { id: attributes.ID, acsUrl: attributes.AssertionConsumerServiceURL, providerName: attributes.ProviderName, - audience: issuer[0]["_"], + audience: issuer[0]['_'], }; }; diff --git a/utils/response.ts b/utils/response.ts index ce2b01c..9515e2d 100644 --- a/utils/response.ts +++ b/utils/response.ts @@ -5,12 +5,12 @@ import { SignedXml, FileKeyInfo } from 'xml-crypto'; import { pki, util, asn1 } from 'node-forge'; const createResponseXML = async (params: { - idpIdentityId: string, - audience: string, - acsUrl: string, - user: User + idpIdentityId: string; + audience: string; + acsUrl: string; + user: User; }): Promise => { - const {idpIdentityId, audience, acsUrl, user} = params; + const { idpIdentityId, audience, acsUrl, user } = params; const authDate = new Date(); const authTimestamp = authDate.toISOString(); @@ -21,46 +21,46 @@ const createResponseXML = async (params: { authDate.setMinutes(authDate.getMinutes() + 10); const notAfter = authDate.toISOString(); - const inResponseTo = '_1234' + const inResponseTo = '_1234'; const responseId = crypto.randomBytes(10).toString('hex'); const attributeStatement = { '@xmlns:xs': 'http://www.w3.org/2001/XMLSchema', '@xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance', - 'saml:Attribute' : [ + 'saml:Attribute': [ { '@Name': 'id', '@NameFormat': 'urn:oasis:names:tc:SAML:2.0:attrname-format:basic', 'saml:AttributeValue': { '#text': user.id, - } + }, }, { '@Name': 'email', '@NameFormat': 'urn:oasis:names:tc:SAML:2.0:attrname-format:basic', 'saml:AttributeValue': { '#text': user.email, - } + }, }, { '@Name': 'firstName', '@NameFormat': 'urn:oasis:names:tc:SAML:2.0:attrname-format:basic', 'saml:AttributeValue': { '#text': user.firstName, - } + }, }, { '@Name': 'lastName', '@NameFormat': 'urn:oasis:names:tc:SAML:2.0:attrname-format:basic', 'saml:AttributeValue': { '#text': user.lastName, - } + }, }, - ] - } + ], + }; const nodes = { - 'samlp:Response':{ + 'samlp:Response': { '@xmlns:samlp': 'urn:oasis:names:tc:SAML:2.0:protocol', '@Version': '2.0', '@ID': responseId, @@ -69,8 +69,8 @@ const createResponseXML = async (params: { '@IssueInstant': authTimestamp, 'samlp:Status': { 'samlp:StatusCode': { - '@Value': 'urn:oasis:names:tc:SAML:2.0:status:Success' - } + '@Value': 'urn:oasis:names:tc:SAML:2.0:status:Success', + }, }, 'saml:Issuer': { '@xmlns:saml': 'urn:oasis:names:tc:SAML:2.0:assertion', @@ -88,7 +88,7 @@ const createResponseXML = async (params: { 'saml:NameID': { '@Format': 'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified', '#text': user.email, - } + }, }, 'saml:Conditions': { '@NotBefore': notBefore, @@ -96,24 +96,24 @@ const createResponseXML = async (params: { 'saml:AudienceRestriction': { 'saml:Audience': { '#text': audience, - } - } + }, + }, }, 'saml:AuthnStatement': { '@AuthnInstant': authTimestamp, '@SessionIndex': '_YIlFoNFzLMDYxdwf-T_BuimfkGa5qhKg', 'saml:AuthnContext': { 'saml:AuthnContextClassRef': { - '#text': 'urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified' - } - } + '#text': 'urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified', + }, + }, }, 'saml:AttributeStatement': attributeStatement, }, - } - } + }, + }; - return xmlbuilder.create(nodes).end({ pretty: true}); + return xmlbuilder.create(nodes).end({ pretty: true }); }; // Create the HTML form to submit the response @@ -171,8 +171,10 @@ function GetKeyInfo(x509Certificate: string, signatureConfig: any = {}) { const signResponseXML = async (xml: string, signingKey: any, publicKey: any): Promise => { const sig = new SignedXml(); - const responseXPath = '/*[local-name(.)="Response" and namespace-uri(.)="urn:oasis:names:tc:SAML:2.0:protocol"]'; - const issuerXPath = '/*[local-name(.)="Issuer" and namespace-uri(.)="urn:oasis:names:tc:SAML:2.0:assertion"]'; + const responseXPath = + '/*[local-name(.)="Response" and namespace-uri(.)="urn:oasis:names:tc:SAML:2.0:protocol"]'; + const issuerXPath = + '/*[local-name(.)="Issuer" and namespace-uri(.)="urn:oasis:names:tc:SAML:2.0:assertion"]'; sig.signatureAlgorithm = 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256'; @@ -180,17 +182,17 @@ const signResponseXML = async (xml: string, signingKey: any, publicKey: any): Pr sig.keyInfoProvider = new GetKeyInfo(publicKey, {}); sig.signingKey = signingKey; - sig.addReference(responseXPath, ['http://www.w3.org/2000/09/xmldsig#enveloped-signature', 'http://www.w3.org/2001/10/xml-exc-c14n#'], 'http://www.w3.org/2001/04/xmlenc#sha256'); + sig.addReference( + responseXPath, + ['http://www.w3.org/2000/09/xmldsig#enveloped-signature', 'http://www.w3.org/2001/10/xml-exc-c14n#'], + 'http://www.w3.org/2001/04/xmlenc#sha256' + ); sig.computeSignature(xml, { location: { reference: responseXPath + issuerXPath, action: 'after' }, }); return sig.getSignedXml(); -} +}; -export { - createResponseXML, - createResponseForm, - signResponseXML -} \ No newline at end of file +export { createResponseXML, createResponseForm, signResponseXML };