112 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			112 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | 'use strict'; | ||
|  | 
 | ||
|  | var ACME = require('../'); | ||
|  | var accountKey = require('../fixtures/account.jwk.json').private; | ||
|  | 
 | ||
|  | var authorization = { | ||
|  | 	identifier: { | ||
|  | 		type: 'dns', | ||
|  | 		value: 'example.com' | ||
|  | 	}, | ||
|  | 	status: 'pending', | ||
|  | 	expires: '2018-04-25T00:23:57Z', | ||
|  | 	challenges: [ | ||
|  | 		{ | ||
|  | 			type: 'dns-01', | ||
|  | 			status: 'pending', | ||
|  | 			url: | ||
|  | 				'https://acme-staging-v02.api.letsencrypt.org/acme/challenge/cMkwXI8pIeKN04Ynfem8ErHK3GeqAPdSt2x6q7PvVGU/118755342', | ||
|  | 			token: 'LZdlUiZ-kWPs6q5WTmQFYQHZKpz9szn2vxEUu0XhyyM' | ||
|  | 		}, | ||
|  | 		{ | ||
|  | 			type: 'http-01', | ||
|  | 			status: 'pending', | ||
|  | 			url: | ||
|  | 				'https://acme-staging-v02.api.letsencrypt.org/acme/challenge/cMkwXI8pIeKN04Ynfem8ErHK3GeqAPdSt2x6q7PvVGU/118755343', | ||
|  | 			token: '1S4zBG5YVhwSBaIY4ksI_KNMRrSmH0DZfNM9v7PYjDU' | ||
|  | 		} | ||
|  | 	] | ||
|  | }; | ||
|  | var expectedChallengeUrl = | ||
|  | 	'http://example.com/.well-known/acme-challenge/1S4zBG5YVhwSBaIY4ksI_KNMRrSmH0DZfNM9v7PYjDU'; | ||
|  | var expectedKeyAuth = | ||
|  | 	'1S4zBG5YVhwSBaIY4ksI_KNMRrSmH0DZfNM9v7PYjDU.UuuZa_56jCM2douUq1riGyRphPtRvCPkxtkg0bP-pNs'; | ||
|  | var expectedKeyAuthDigest = 'iQiMcQUDiAeD0TJV1RHJuGnI5D2-PuSpxKz9JqUaZ2M'; | ||
|  | var expectedDnsHost = '_test-challenge.example.com'; | ||
|  | 
 | ||
|  | async function main() { | ||
|  | 	console.info('\n[Test] computing challenge authorizatin responses'); | ||
|  | 	var challenges = authorization.challenges.slice(0); | ||
|  | 
 | ||
|  | 	function next() { | ||
|  | 		var ch = challenges.shift(); | ||
|  | 		if (!ch) { | ||
|  | 			return null; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		var hostname = authorization.identifier.value; | ||
|  | 		return ACME.computeChallenge({ | ||
|  | 			accountKey: accountKey, | ||
|  | 			hostname: hostname, | ||
|  | 			challenge: ch, | ||
|  | 			dnsPrefix: '_test-challenge' | ||
|  | 		}) | ||
|  | 			.then(function(auth) { | ||
|  | 				if ('dns-01' === ch.type) { | ||
|  | 					if (auth.keyAuthorizationDigest !== expectedKeyAuthDigest) { | ||
|  | 						console.error('[keyAuthorizationDigest]'); | ||
|  | 						console.error(auth.keyAuthorizationDigest); | ||
|  | 						console.error(expectedKeyAuthDigest); | ||
|  | 						throw new Error('bad keyAuthDigest'); | ||
|  | 					} | ||
|  | 					if (auth.dnsHost !== expectedDnsHost) { | ||
|  | 						console.error('[dnsHost]'); | ||
|  | 						console.error(auth.dnsHost); | ||
|  | 						console.error(expectedDnsHost); | ||
|  | 						throw new Error('bad dnsHost'); | ||
|  | 					} | ||
|  | 				} else if ('http-01' === ch.type) { | ||
|  | 					if (auth.challengeUrl !== expectedChallengeUrl) { | ||
|  | 						console.error('[challengeUrl]'); | ||
|  | 						console.error(auth.challengeUrl); | ||
|  | 						console.error(expectedChallengeUrl); | ||
|  | 						throw new Error('bad challengeUrl'); | ||
|  | 					} | ||
|  | 					if (auth.challengeUrl !== expectedChallengeUrl) { | ||
|  | 						console.error('[keyAuthorization]'); | ||
|  | 						console.error(auth.keyAuthorization); | ||
|  | 						console.error(expectedKeyAuth); | ||
|  | 						throw new Error('bad keyAuth'); | ||
|  | 					} | ||
|  | 				} else { | ||
|  | 					throw new Error('bad authorization inputs'); | ||
|  | 				} | ||
|  | 				console.info('PASS', hostname, ch.type); | ||
|  | 				return next(); | ||
|  | 			}) | ||
|  | 			.catch(function(err) { | ||
|  | 				err.message = | ||
|  | 					'Error computing ' + | ||
|  | 					ch.type + | ||
|  | 					' for ' + | ||
|  | 					hostname + | ||
|  | 					':' + | ||
|  | 					err.message; | ||
|  | 				throw err; | ||
|  | 			}); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	return next(); | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = function() { | ||
|  | 	return main(authorization) | ||
|  | 		.then(function() { | ||
|  | 			console.info('PASS'); | ||
|  | 		}) | ||
|  | 		.catch(function(err) { | ||
|  | 			console.error(err.stack); | ||
|  | 			process.exit(1); | ||
|  | 		}); | ||
|  | }; |