82 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.7 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;
 |