mirror of
				https://github.com/therootcompany/acme.js.git
				synced 2024-11-16 17:29:00 +00:00 
			
		
		
		
	
		
			
	
	
		
			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'); |