95 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.6 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';
 | |
| /* global Promise */
 | |
| 
 | |
| var ACME2 = require('./').ACME;
 | |
| 
 | |
| function resolveFn(cb) {
 | |
| 	return function(val) {
 | |
| 		// nextTick to get out of Promise chain
 | |
| 		process.nextTick(function() {
 | |
| 			cb(null, val);
 | |
| 		});
 | |
| 	};
 | |
| }
 | |
| function rejectFn(cb) {
 | |
| 	return function(err) {
 | |
| 		console.error('[acme-v2] handled(?) rejection as errback:');
 | |
| 		console.error(err.stack);
 | |
| 
 | |
| 		// nextTick to get out of Promise chain
 | |
| 		process.nextTick(function() {
 | |
| 			cb(err);
 | |
| 		});
 | |
| 
 | |
| 		// do not resolve promise further
 | |
| 		return new Promise(function() {});
 | |
| 	};
 | |
| }
 | |
| 
 | |
| function create(deps) {
 | |
| 	deps.LeCore = {};
 | |
| 	var acme2 = ACME2.create(deps);
 | |
| 	acme2.registerNewAccount = function(options, cb) {
 | |
| 		acme2.accounts.create(options).then(resolveFn(cb), rejectFn(cb));
 | |
| 	};
 | |
| 	acme2.getCertificate = function(options, cb) {
 | |
| 		options.agreeToTerms =
 | |
| 			options.agreeToTerms ||
 | |
| 			function(tos) {
 | |
| 				return Promise.resolve(tos);
 | |
| 			};
 | |
| 		acme2.certificates.create(options).then(function(certs) {
 | |
| 			var privkeyPem = acme2.RSA.exportPrivatePem(options.domainKeypair);
 | |
| 			certs.privkey = privkeyPem;
 | |
| 			resolveFn(cb)(certs);
 | |
| 		}, rejectFn(cb));
 | |
| 	};
 | |
| 	acme2.getAcmeUrls = function(options, cb) {
 | |
| 		acme2.init(options).then(resolveFn(cb), rejectFn(cb));
 | |
| 	};
 | |
| 	acme2.getOptions = function() {
 | |
| 		var defs = {};
 | |
| 
 | |
| 		Object.keys(module.exports.defaults).forEach(function(key) {
 | |
| 			defs[key] = defs[deps] || module.exports.defaults[key];
 | |
| 		});
 | |
| 
 | |
| 		return defs;
 | |
| 	};
 | |
| 	acme2.stagingServerUrl = module.exports.defaults.stagingServerUrl;
 | |
| 	acme2.productionServerUrl = module.exports.defaults.productionServerUrl;
 | |
| 	acme2.acmeChallengePrefix = module.exports.defaults.acmeChallengePrefix;
 | |
| 	return acme2;
 | |
| }
 | |
| 
 | |
| module.exports.ACME = {};
 | |
| module.exports.defaults = {
 | |
| 	productionServerUrl: 'https://acme-v02.api.letsencrypt.org/directory',
 | |
| 	stagingServerUrl: 'https://acme-staging-v02.api.letsencrypt.org/directory',
 | |
| 	knownEndpoints: [
 | |
| 		'keyChange',
 | |
| 		'meta',
 | |
| 		'newAccount',
 | |
| 		'newNonce',
 | |
| 		'newOrder',
 | |
| 		'revokeCert'
 | |
| 	],
 | |
| 	challengeTypes: ['http-01', 'dns-01'],
 | |
| 	challengeType: 'http-01',
 | |
| 	//, keyType:                'rsa' // ecdsa
 | |
| 	//, keySize:                2048 // 256
 | |
| 	rsaKeySize: 2048, // 256
 | |
| 	acmeChallengePrefix: '/.well-known/acme-challenge/'
 | |
| };
 | |
| Object.keys(module.exports.defaults).forEach(function(key) {
 | |
| 	module.exports.ACME[key] = module.exports.defaults[key];
 | |
| });
 | |
| Object.keys(ACME2).forEach(function(key) {
 | |
| 	module.exports.ACME[key] = ACME2[key];
 | |
| });
 | |
| module.exports.ACME.create = create;
 |