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