mirror of
				https://github.com/therootcompany/acme.js.git
				synced 2024-11-16 17:29:00 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			81 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // 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/. */
 | |
| '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
 | |
| var expected = '----\nxxxx\nyyyy\n----\n\n----\nxxxx\nyyyy\n----\n';
 | |
| var tests = [
 | |
| 	'----\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'
 | |
| ];
 | |
| 
 | |
| var ACME = require('../');
 | |
| 
 | |
| module.exports = function() {
 | |
| 	console.info('\n[Test] can split and format PEM chain properly');
 | |
| 
 | |
| 	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');
 | |
| 		}
 | |
| 	});
 | |
| 
 | |
| 	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');
 | |
| 	}
 | |
| 
 | |
| 	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');
 | |
| 	}
 | |
| 
 | |
| 	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();
 | |
| };
 |