2018-12-17 04:19:20 +00:00
|
|
|
// Copyright 2018 AJ ONeal. All rights reserved
|
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
2018-07-04 06:10:43 +00:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
/*
|
|
|
|
-----BEGIN CERTIFICATE-----LF
|
|
|
|
xxxLF
|
|
|
|
yyyLF
|
|
|
|
-----END CERTIFICATE-----LF
|
|
|
|
LF
|
|
|
|
-----BEGIN CERTIFICATE-----LF
|
|
|
|
xxxLF
|
|
|
|
yyyLF
|
|
|
|
-----END CERTIFICATE-----LF
|
|
|
|
|
|
|
|
Rules
|
|
|
|
* Only Unix LF (\n) Line endings
|
|
|
|
* Each PEM's lines are separated with \n
|
|
|
|
* Each PEM ends with \n
|
|
|
|
* Each PEM is separated with a \n (just like commas separating an array)
|
|
|
|
*/
|
|
|
|
|
|
|
|
// https://github.com/certbot/certbot/issues/5721#issuecomment-402362709
|
2019-06-13 07:55:25 +00:00
|
|
|
var expected = '----\nxxxx\nyyyy\n----\n\n----\nxxxx\nyyyy\n----\n';
|
2018-07-04 06:10:43 +00:00
|
|
|
var tests = [
|
2019-06-13 07:55:25 +00:00
|
|
|
'----\r\nxxxx\r\nyyyy\r\n----\r\n\r\n----\r\nxxxx\r\nyyyy\r\n----\r\n',
|
|
|
|
'----\r\nxxxx\r\nyyyy\r\n----\r\n----\r\nxxxx\r\nyyyy\r\n----\r\n',
|
|
|
|
'----\nxxxx\nyyyy\n----\n\n----\r\nxxxx\r\nyyyy\r\n----',
|
|
|
|
'----\nxxxx\nyyyy\n----\n----\r\nxxxx\r\nyyyy\r\n----',
|
|
|
|
'----\nxxxx\nyyyy\n----\n----\nxxxx\nyyyy\n----',
|
|
|
|
'----\nxxxx\nyyyy\n----\n----\nxxxx\nyyyy\n----\n',
|
|
|
|
'----\nxxxx\nyyyy\n----\n\n----\nxxxx\nyyyy\n----\n',
|
|
|
|
'----\nxxxx\nyyyy\n----\r\n----\nxxxx\ryyyy\n----\n'
|
2018-07-04 06:10:43 +00:00
|
|
|
];
|
|
|
|
|
2019-10-24 17:39:25 +00:00
|
|
|
var ACME = require('../');
|
2018-07-04 06:10:43 +00:00
|
|
|
|
2019-10-24 17:39:25 +00:00
|
|
|
module.exports = function() {
|
|
|
|
console.info('\n[Test] can split and format PEM chain properly');
|
2018-07-04 06:10:43 +00:00
|
|
|
|
2019-10-24 17:39:25 +00:00
|
|
|
tests.forEach(function(str) {
|
|
|
|
var actual = ACME.formatPemChain(str);
|
|
|
|
if (expected !== actual) {
|
|
|
|
console.error('input: ', JSON.stringify(str));
|
|
|
|
console.error('expected:', JSON.stringify(expected));
|
|
|
|
console.error('actual: ', JSON.stringify(actual));
|
|
|
|
throw new Error('did not pass');
|
|
|
|
}
|
|
|
|
});
|
2018-07-04 06:10:43 +00:00
|
|
|
|
2019-10-24 17:39:25 +00:00
|
|
|
if (
|
|
|
|
'----\nxxxx\nyyyy\n----\n' !==
|
|
|
|
ACME.formatPemChain('\n\n----\r\nxxxx\r\nyyyy\r\n----\n\n')
|
|
|
|
) {
|
|
|
|
throw new Error('Not proper for single cert in chain');
|
|
|
|
}
|
2018-07-04 06:10:43 +00:00
|
|
|
|
2019-10-24 17:39:25 +00:00
|
|
|
if (
|
|
|
|
'--B--\nxxxx\nyyyy\n--E--\n\n--B--\nxxxx\nyyyy\n--E--\n\n--B--\nxxxx\nyyyy\n--E--\n' !==
|
|
|
|
ACME.formatPemChain(
|
|
|
|
'\n\n\n--B--\nxxxx\nyyyy\n--E--\n\n\n\n--B--\nxxxx\nyyyy\n--E--\n\n\n--B--\nxxxx\nyyyy\n--E--\n\n\n'
|
|
|
|
)
|
|
|
|
) {
|
|
|
|
throw new Error('Not proper for three certs in chain');
|
2019-06-13 07:55:25 +00:00
|
|
|
}
|
2018-07-04 06:10:43 +00:00
|
|
|
|
2019-10-24 17:39:25 +00:00
|
|
|
ACME.splitPemChain(
|
|
|
|
'--B--\nxxxx\nyyyy\n--E--\n\n--B--\nxxxx\nyyyy\n--E--\n\n--B--\nxxxx\nyyyy\n--E--\n'
|
|
|
|
).forEach(function(str) {
|
|
|
|
if ('--B--\nxxxx\nyyyy\n--E--\n' !== str) {
|
|
|
|
throw new Error('bad thingy');
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
console.info('PASS');
|
|
|
|
|
|
|
|
return Promise.resolve();
|
|
|
|
};
|