Skip to content

Commit 433003e

Browse files
committed
refactor: extracts utils.factoryForNode() and uses it in saml11 and saml20
1 parent c9c38ba commit 433003e

File tree

3 files changed

+21
-13
lines changed

3 files changed

+21
-13
lines changed

lib/saml11.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
var fs = require('fs');
21
var path = require('path');
32
var utils = require('./utils');
43
var Parser = require('xmldom').DOMParser;
@@ -10,7 +9,7 @@ var crypto = require('crypto');
109
var EncryptXml = require('./xml/encrypt');
1110
var SignXml = require('./xml/sign');
1211

13-
var saml11 = fs.readFileSync(path.join(__dirname, 'saml11.template')).toString();
12+
var newSaml11Document = utils.factoryForNode(path.join(__dirname, 'saml11.template'));
1413

1514
var NAMESPACE = 'urn:oasis:names:tc:SAML:1.0:assertion';
1615

@@ -74,7 +73,7 @@ exports.create = function(options, callback) {
7473
function createAssertion(options, strategies, callback) {
7574
var doc;
7675
try {
77-
doc = new Parser().parseFromString(saml11.toString());
76+
doc = newSaml11Document();
7877
} catch(err){
7978
return utils.reportError(err, callback);
8079
}

lib/saml20.js

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
var fs = require('fs');
21
var path = require('path');
32
var async = require('async');
4-
var Parser = require('xmldom').DOMParser;
53
var moment = require('moment');
64
var xmlNameValidator = require('xml-name-validator');
75
var is_uri = require('valid-url').is_uri;
@@ -10,14 +8,7 @@ var EncryptXml = require('./xml/encrypt');
108
var SignXml = require('./xml/sign');
119
var utils = require('./utils');
1210

13-
var newSaml20Document = (function () {
14-
var saml20Template = fs.readFileSync(path.join(__dirname, 'saml20.template'));
15-
var prototypeDoc = new Parser().parseFromString(saml20Template.toString())
16-
17-
return function () {
18-
return prototypeDoc.cloneNode(true);
19-
};
20-
})();
11+
var newSaml20Document = utils.factoryForNode(path.join(__dirname, 'saml20.template'));
2112

2213
var NAMESPACE = 'urn:oasis:names:tc:SAML:2.0:assertion';
2314

lib/utils.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
var fs = require('fs');
2+
var Parser = require('xmldom').DOMParser;
3+
14
exports.pemToCert = function(pem) {
25
var cert = /-----BEGIN CERTIFICATE-----([^-]*)-----END CERTIFICATE-----/g.exec(pem.toString());
36
if (cert && cert.length > 0) {
@@ -57,4 +60,19 @@ exports.removeWhitespace = function(xml) {
5760

5861
function getRandomInt(min, max) {
5962
return Math.floor(Math.random() * (max - min + 1)) + min;
63+
}
64+
65+
/**
66+
* Returns a function that can be called to create a new Node.
67+
*
68+
* @param {string} pathToTemplate an absolute path to a template file
69+
* @return {function(): Node}
70+
*/
71+
exports.factoryForNode = function factoryForNode(pathToTemplate) {
72+
var template = fs.readFileSync(pathToTemplate)
73+
var prototypeDoc = new Parser().parseFromString(template.toString())
74+
75+
return function () {
76+
return prototypeDoc.cloneNode(true);
77+
};
6078
};

0 commit comments

Comments
 (0)