// 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;