78 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| '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"
 | |
| ];
 | |
| 
 | |
| function formatPemChain(str) {
 | |
|   return str.trim().replace(/[\r\n]+/g, '\n').replace(/\-\n\-/g, '-\n\n-') + '\n';
 | |
| }
 | |
| function splitPemChain(str) {
 | |
|   return str.trim().split(/[\r\n]{2,}/g).map(function (str) {
 | |
|     return str + '\n';
 | |
|   });
 | |
| }
 | |
| 
 | |
| tests.forEach(function (str) {
 | |
|   var actual = 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"
 | |
|   !==
 | |
|   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"
 | |
|   !==
 | |
|   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");
 | |
| }
 | |
| 
 | |
| 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');
 |