Browse Source

paypro: handle concatenated pems in pem parser.

patch-2
Christopher Jeffrey 10 years ago
parent
commit
5145272575
  1. 19
      browser/root-certs
  2. 19
      lib/common/RootCerts.js

19
browser/root-certs

@ -46,7 +46,7 @@ function getRootCerts(callback) {
+ '}, {});\n' + '}, {});\n'
+ '\n' + '\n'
+ 'function getTrusted(pem) {\n' + 'function getTrusted(pem) {\n'
+ ' pem = parsePEM(pem).pem;\n' + ' pem = parsePEM(pem)[0].pem;\n'
+ ' if (!Object.prototype.hasOwnProperty.call(trusted, pem)) return;\n' + ' if (!Object.prototype.hasOwnProperty.call(trusted, pem)) return;\n'
+ ' return trusted[pem];\n' + ' return trusted[pem];\n'
+ '}\n' + '}\n'
@ -59,8 +59,17 @@ function getRootCerts(callback) {
+ '\n' + '\n'
+ 'function parsePEM(pem) {\n' + 'function parsePEM(pem) {\n'
+ ' pem = pem + "";\n' + ' pem = pem + "";\n'
+ ' pem = pem.replace(/-----BEGIN CERTIFICATE-----/g, "");\n' + ' var concatted = pem.trim().split(/-----BEGIN [^\\-\\r\\n]+-----/);\n'
+ ' pem = pem.replace(/-----END CERTIFICATE-----/g, "");\n' + ' if (concatted.length > 2) {\n'
+ ' return concatted.reduce(function(out, pem) {\n'
+ ' if (!pem) return out;\n'
+ ' pem = parsePEM(pem)[0].pem;\n'
+ ' if (pem) out.push(pem);\n'
+ ' return out;\n'
+ ' }, []);\n'
+ ' }\n'
+ ' pem = pem.replace(/-----BEGIN [^\\-\\r\\n]+-----/, "");\n'
+ ' pem = pem.replace(/-----END [^\\-\\r\\n]+-----/, "");\n'
+ ' var parts = pem.trim().split(/(?:\\r?\\n){2,}/);\n' + ' var parts = pem.trim().split(/(?:\\r?\\n){2,}/);\n'
+ ' var headers = {};\n' + ' var headers = {};\n'
+ ' if (parts.length > 1) {\n' + ' if (parts.length > 1) {\n'
@ -77,12 +86,12 @@ function getRootCerts(callback) {
+' var der = pem\n' +' var der = pem\n'
+ ' ? new Buffer(pem, "base64")\n' + ' ? new Buffer(pem, "base64")\n'
+ ' : null;\n' + ' : null;\n'
+ ' return {\n' + ' return [{\n'
+ ' headers: headers,\n' + ' headers: headers,\n'
+ ' pem: pem,\n' + ' pem: pem,\n'
+ ' der: der,\n' + ' der: der,\n'
+ ' body: der || new Buffer([0])\n' + ' body: der || new Buffer([0])\n'
+ ' };\n' + ' }];\n'
+ '}\n' + '}\n'
+ '\n' + '\n'
+ 'exports.certs = certs;\n' + 'exports.certs = certs;\n'

19
lib/common/RootCerts.js

@ -3715,7 +3715,7 @@ var trusted = Object.keys(certs).reduce(function(trusted, key) {
}, {}); }, {});
function getTrusted(pem) { function getTrusted(pem) {
pem = parsePEM(pem).pem; pem = parsePEM(pem)[0].pem;
if (!Object.prototype.hasOwnProperty.call(trusted, pem)) return; if (!Object.prototype.hasOwnProperty.call(trusted, pem)) return;
return trusted[pem]; return trusted[pem];
} }
@ -3728,8 +3728,17 @@ function getCert(name) {
function parsePEM(pem) { function parsePEM(pem) {
pem = pem + ""; pem = pem + "";
pem = pem.replace(/-----BEGIN CERTIFICATE-----/g, ""); var concatted = pem.trim().split(/-----BEGIN [^\-\r\n]+-----/);
pem = pem.replace(/-----END CERTIFICATE-----/g, ""); if (concatted.length > 2) {
return concatted.reduce(function(out, pem) {
if (!pem) return out;
pem = parsePEM(pem)[0].pem;
if (pem) out.push(pem);
return out;
}, []);
}
pem = pem.replace(/-----BEGIN [^\-\r\n]+-----/, "");
pem = pem.replace(/-----END [^\-\r\n]+-----/, "");
var parts = pem.trim().split(/(?:\r?\n){2,}/); var parts = pem.trim().split(/(?:\r?\n){2,}/);
var headers = {}; var headers = {};
if (parts.length > 1) { if (parts.length > 1) {
@ -3746,12 +3755,12 @@ function parsePEM(pem) {
var der = pem var der = pem
? new Buffer(pem, "base64") ? new Buffer(pem, "base64")
: null; : null;
return { return [{
headers: headers, headers: headers,
pem: pem, pem: pem,
der: der, der: der,
body: der || new Buffer([0]) body: der || new Buffer([0])
}; }];
} }
exports.certs = certs; exports.certs = certs;

Loading…
Cancel
Save