acme.js/compat.js

95 lines
2.6 KiB
JavaScript
Raw Permalink Normal View History

// 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) {
2019-06-13 07:55:25 +00:00
return function(val) {
// nextTick to get out of Promise chain
process.nextTick(function() {
cb(null, val);
});
};
}
function rejectFn(cb) {
2019-06-13 07:55:25 +00:00
return function(err) {
console.error('[acme-v2] handled(?) rejection as errback:');
console.error(err.stack);
2018-04-11 18:03:40 +00:00
2019-06-13 07:55:25 +00:00
// nextTick to get out of Promise chain
process.nextTick(function() {
cb(err);
});
2018-04-11 18:03:40 +00:00
2019-06-13 07:55:25 +00:00
// do not resolve promise further
return new Promise(function() {});
};
}
function create(deps) {
2019-06-13 07:55:25 +00:00
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 = {};
2018-04-11 07:22:42 +00:00
2019-06-13 07:55:25 +00:00
Object.keys(module.exports.defaults).forEach(function(key) {
defs[key] = defs[deps] || module.exports.defaults[key];
});
2018-04-11 07:22:42 +00:00
2019-06-13 07:55:25 +00:00
return defs;
};
acme2.stagingServerUrl = module.exports.defaults.stagingServerUrl;
acme2.productionServerUrl = module.exports.defaults.productionServerUrl;
acme2.acmeChallengePrefix = module.exports.defaults.acmeChallengePrefix;
return acme2;
}
2019-06-13 07:55:25 +00:00
module.exports.ACME = {};
module.exports.defaults = {
2019-06-13 07:55:25 +00:00
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/'
};
2019-06-13 07:55:25 +00:00
Object.keys(module.exports.defaults).forEach(function(key) {
module.exports.ACME[key] = module.exports.defaults[key];
});
2019-06-13 07:55:25 +00:00
Object.keys(ACME2).forEach(function(key) {
module.exports.ACME[key] = ACME2[key];
});
2018-04-11 17:34:18 +00:00
module.exports.ACME.create = create;