diff --git a/src/passport-saml/saml.ts b/src/passport-saml/saml.ts index f98d598f..f03cdf1d 100644 --- a/src/passport-saml/saml.ts +++ b/src/passport-saml/saml.ts @@ -4,7 +4,6 @@ import * as zlib from "zlib"; import * as crypto from "crypto"; import * as url from "url"; import * as querystring from "querystring"; -import * as xmlbuilder from "xmlbuilder"; import * as util from "util"; import { CacheProvider as InMemoryCacheProvider } from "./inmemory-cache-provider"; import * as algorithms from "./algorithms"; @@ -33,6 +32,7 @@ import { import { assertRequired } from "./utility"; import { buildXml2JsObject, + buildXmlBuilderObject, decryptXml, parseDomFromString, parseXml2JsFromString, @@ -359,7 +359,7 @@ class SAML { request["samlp:AuthnRequest"]["samlp:Scoping"] = scoping; } - let stringRequest = xmlbuilder.create((request as unknown) as Record).end(); + let stringRequest = buildXmlBuilderObject(request, false); if (isHttpPostBinding && this.options.privateKey != null) { stringRequest = signAuthnRequestPost(stringRequest, this.options); } @@ -405,7 +405,7 @@ class SAML { } await this.cacheProvider.saveAsync(id, instant); - return xmlbuilder.create((request as unknown) as Record).end(); + return buildXmlBuilderObject(request, false); } generateLogoutResponse(req: Request, logoutRequest: Profile) { @@ -432,7 +432,7 @@ class SAML { }, }; - return xmlbuilder.create(request).end(); + return buildXmlBuilderObject(request, false); } async requestToUrlAsync( @@ -1370,9 +1370,7 @@ class SAML { "@Binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST", "@Location": this.getCallbackUrl({}), }; - return xmlbuilder - .create((metadata as unknown) as Record) - .end({ pretty: true, indent: " ", newline: "\n" }); + return buildXmlBuilderObject(metadata, true); } keyToPEM(key: string | Buffer): typeof key extends string | Buffer ? string | Buffer : Error { diff --git a/src/passport-saml/xml-utils.ts b/src/passport-saml/xml-utils.ts index 0fec5b38..663e852d 100644 --- a/src/passport-saml/xml-utils.ts +++ b/src/passport-saml/xml-utils.ts @@ -3,6 +3,7 @@ import * as xmlCrypto from "xml-crypto"; import * as xmlenc from "xml-encryption"; import * as xmldom from "xmldom"; import * as xml2js from "xml2js"; +import * as xmlbuilder from "xmlbuilder"; type SelectedValue = string | number | boolean | Node; @@ -111,3 +112,8 @@ export const buildXml2JsObject = (rootName: string, xml: any): string => { }; return new xml2js.Builder(builderOpts).buildObject(xml); }; + +export const buildXmlBuilderObject = (xml: Record, pretty: boolean): string => { + const options = pretty ? { pretty: true, indent: " ", newline: "\n" } : {}; + return xmlbuilder.create(xml).end(options); +};