From 1b6f8deeff52ba6cd1a5401f2162d7b4a444333c Mon Sep 17 00:00:00 2001 From: Douglas Barone Date: Mon, 23 Oct 2023 13:51:18 -0400 Subject: [PATCH] Parse XML response --- package-lock.json | 40 +++++++++++++++++++++++++++++++ package.json | 1 + src/server/paloalto/PaFirewall.ts | 11 +++++++-- 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index d645761..bf2c4e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "body-parser": "^1.20.2", "cors": "^2.8.5", "express": "^4.18.2", + "fast-xml-parser": "^4.3.2", "ldapts": "^7.0.5", "roboto-fontface": "*", "vue": "^3.2.0", @@ -1408,6 +1409,27 @@ "node": ">= 0.8" } }, + "node_modules/fast-xml-parser": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.2.tgz", + "integrity": "sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/finalhandler": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", @@ -2396,6 +2418,11 @@ "node": ">=8" } }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, "node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -3787,6 +3814,14 @@ } } }, + "fast-xml-parser": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.2.tgz", + "integrity": "sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg==", + "requires": { + "strnum": "^1.0.5" + } + }, "finalhandler": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", @@ -4479,6 +4514,11 @@ "ansi-regex": "^5.0.1" } }, + "strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", diff --git a/package.json b/package.json index 032f4b6..8bca7f7 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "body-parser": "^1.20.2", "cors": "^2.8.5", "express": "^4.18.2", + "fast-xml-parser": "^4.3.2", "ldapts": "^7.0.5", "roboto-fontface": "*", "vue": "^3.2.0", diff --git a/src/server/paloalto/PaFirewall.ts b/src/server/paloalto/PaFirewall.ts index 90e0959..ca2782f 100644 --- a/src/server/paloalto/PaFirewall.ts +++ b/src/server/paloalto/PaFirewall.ts @@ -1,5 +1,12 @@ +import { XMLParser } from 'fast-xml-parser' + const MAP_TIMEOUT_IN_MINUTES = process.env.MAPPING_TIMEOUT || '720' // 12 horas +const xmlParser = new XMLParser({ + ignoreAttributes: false, + attributeNamePrefix: 'attr_' +}) + export class PaFirewall { constructor(private ip: string, private key: string) {} @@ -19,9 +26,9 @@ export class PaFirewall { const data = await response.text() - const success = data.includes('status="success"') + const parsedData = xmlParser.parse(data) - if (!success) { + if (parsedData.response.attr_status !== 'success') { console.log(data) throw new Error('Failed to map user ID to IP') }