diff --git a/data/idp-private.key b/data/idp-private.key deleted file mode 100644 index 9062024..0000000 --- a/data/idp-private.key +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSjCCAbOgAwIBAgIBADANBgkqhkiG9w0BAQ0FADBCMQswCQYDVQQGEwJ1czEN -MAsGA1UECAwERGVtbzEPMA0GA1UECgwGQm94eUhRMRMwEQYDVQQDDApib3h5aHEu -Y29tMB4XDTIyMDExMzE3NTQ1NVoXDTIzMDExMzE3NTQ1NVowQjELMAkGA1UEBhMC -dXMxDTALBgNVBAgMBERlbW8xDzANBgNVBAoMBkJveHlIUTETMBEGA1UEAwwKYm94 -eWhxLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA4lbyAVpXmp1bGPGn -PfauUzTvPil0gDJaGBTYQ50A7lDLrD0rh/SbsRY5e8VA2JnYaKT7k53FL4n9ogjx -HQRT4b7s9ZjUUC7BHYPd4CzATjf6Iy48bbout2VphuZdWjwbY1uEfolaZR2QU4IR -4RYfa4L4fGZufA8ayunCWXTackMCAwEAAaNQME4wHQYDVR0OBBYEFKk0NXw5l0fq -MQ3GW4mNzazrZeEQMB8GA1UdIwQYMBaAFKk0NXw5l0fqMQ3GW4mNzazrZeEQMAwG -A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQENBQADgYEABIL+uv5KbnqLnvbeyglcuDSf -MVlPqMlvvliPLZa2TGluutL3t+jFfJNi6Vavd4BNyVsCYRe/ab8+/nok1Lu/IqKF -vifu1QGHsF1vKyafmVC8cMX/lxsvjedsOs++59yOAHAgXn+0IuBwupinKF4Tuqd7 -n5gl9V4czyfFtrJUCQc= ------END CERTIFICATE----- diff --git a/data/idp-public.key b/data/idp-public.key deleted file mode 100644 index 9062024..0000000 --- a/data/idp-public.key +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSjCCAbOgAwIBAgIBADANBgkqhkiG9w0BAQ0FADBCMQswCQYDVQQGEwJ1czEN -MAsGA1UECAwERGVtbzEPMA0GA1UECgwGQm94eUhRMRMwEQYDVQQDDApib3h5aHEu -Y29tMB4XDTIyMDExMzE3NTQ1NVoXDTIzMDExMzE3NTQ1NVowQjELMAkGA1UEBhMC -dXMxDTALBgNVBAgMBERlbW8xDzANBgNVBAoMBkJveHlIUTETMBEGA1UEAwwKYm94 -eWhxLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA4lbyAVpXmp1bGPGn -PfauUzTvPil0gDJaGBTYQ50A7lDLrD0rh/SbsRY5e8VA2JnYaKT7k53FL4n9ogjx -HQRT4b7s9ZjUUC7BHYPd4CzATjf6Iy48bbout2VphuZdWjwbY1uEfolaZR2QU4IR -4RYfa4L4fGZufA8ayunCWXTackMCAwEAAaNQME4wHQYDVR0OBBYEFKk0NXw5l0fq -MQ3GW4mNzazrZeEQMB8GA1UdIwQYMBaAFKk0NXw5l0fqMQ3GW4mNzazrZeEQMAwG -A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQENBQADgYEABIL+uv5KbnqLnvbeyglcuDSf -MVlPqMlvvliPLZa2TGluutL3t+jFfJNi6Vavd4BNyVsCYRe/ab8+/nok1Lu/IqKF -vifu1QGHsF1vKyafmVC8cMX/lxsvjedsOs++59yOAHAgXn+0IuBwupinKF4Tuqd7 -n5gl9V4czyfFtrJUCQc= ------END CERTIFICATE----- diff --git a/utils/certificate.ts b/utils/certificate.ts index 4563d61..30b24fe 100644 --- a/utils/certificate.ts +++ b/utils/certificate.ts @@ -2,11 +2,11 @@ import { promises as fs } from 'fs'; import path from 'path'; const fetchPublicKey = async (): Promise => { - return await fs.readFile(path.join('data', 'idp-public.key'), 'ascii'); + return await fs.readFile(path.join('data', 'public.crt'), 'ascii'); }; const fetchPrivateKey = async (): Promise => { - return await fs.readFile(path.join('data', 'idp-private.key'), 'ascii'); + return await fs.readFile(path.join('data', 'key.pem'), 'ascii'); } const stripCertHeaderAndFooter = (cert: string): string => { diff --git a/utils/idp.ts b/utils/idp.ts new file mode 100644 index 0000000..b83bb91 --- /dev/null +++ b/utils/idp.ts @@ -0,0 +1,26 @@ +import { promises as fs } from 'fs'; +import path from 'path'; +import { stripCertHeaderAndFooter } from './certificate'; + +const createIdPMetadataXML = async ({ + idpEntityId, + idpSsoUrl, + certificate, +}: { + idpEntityId: string; + idpSsoUrl: string; + certificate: string; +}): Promise => { + const xmlPath = path.join('data', 'idp-metadata.xml'); + const xml = await fs.readFile(xmlPath, 'utf8'); + certificate = stripCertHeaderAndFooter(certificate) + + return xml + .replace('idp_entity_id', idpEntityId) + .replace('idp_certificate', certificate) + .replace(/idp_sso_url/g, idpSsoUrl); +}; + +export { + createIdPMetadataXML, +} \ No newline at end of file diff --git a/utils/index.ts b/utils/index.ts index ada9ea8..cb79829 100644 --- a/utils/index.ts +++ b/utils/index.ts @@ -1,3 +1,4 @@ -export * from './certificate' -export * from './request' -export * from './response' \ No newline at end of file +export * from './certificate'; +export * from './request'; +export * from './response'; +export * from './idp'; \ No newline at end of file diff --git a/utils/request.ts b/utils/request.ts index b40485c..97c933b 100644 --- a/utils/request.ts +++ b/utils/request.ts @@ -33,25 +33,7 @@ const extractSAMLRequestAttributes = async (samlRequest: string) => { }; }; -const createIdPMetadataXML = async ({ - idpEntityId, - idpSsoUrl, - certificate, -}: { - idpEntityId: string; - idpSsoUrl: string; - certificate: string; -}): Promise => { - const xmlPath = path.join('data', 'idp-metadata.xml'); - const xml = await fs.readFile(xmlPath, 'utf8'); - - return xml - .replace('idp_entity_id', idpEntityId) - .replace('idp_certificate', certificate) - .replace(/idp_sso_url/g, idpSsoUrl); -}; export { extractSAMLRequestAttributes, - createIdPMetadataXML, } \ No newline at end of file diff --git a/utils/response.ts b/utils/response.ts index 11dc157..8f7a1ca 100644 --- a/utils/response.ts +++ b/utils/response.ts @@ -150,7 +150,7 @@ const signResponseXML = async (xml: string, signingKey: any, publicKey: any): Pr console.log({publicKey, signingKey}) sig.signatureAlgorithm = 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256'; - sig.keyInfoProvider = new FileKeyInfo(stripCertHeaderAndFooter(publicKey)); + sig.keyInfoProvider = new FileKeyInfo(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');