smartcert/dist/cert.classes.letsencrypt.js

136 lines
9.6 KiB
JavaScript
Raw Permalink Normal View History

2016-10-23 22:35:00 +00:00
"use strict";
const q = require("q");
2017-01-01 04:18:50 +00:00
let letsencrypt = require('letsencrypt');
let leStore = require('le-store-certbot');
2016-10-23 22:35:00 +00:00
const plugins = require("./cert.plugins");
const paths = require("./cert.paths");
2017-01-01 04:18:50 +00:00
let leStoreConfig = {
2016-10-24 01:26:34 +00:00
configDir: paths.leConfigDir,
2017-01-01 04:18:50 +00:00
privkeyPath: ':configDir/:hostname/privkey.pem',
fullchainPath: ':configDir/:hostname/fullchain.pem',
certPath: ':configDir/:hostname/cert.pem',
chainPath: ':configDir/:hostname/chain.pem',
workDir: ':configDir/letsencrypt/var/lib',
logsDir: ':configDir/letsencrypt/var/log',
debug: true
};
let leStoreInstance = leStore.create(leStoreConfig);
2016-10-23 22:35:00 +00:00
class Letsencrypt {
constructor(optionsArg) {
// determine leEnv
this.leEnv = optionsArg.leEnv;
this.challengeHandler = optionsArg.challengeHandler;
this.sslDir = optionsArg.sslDir;
// set letsencrypt environment
if (this.leEnv === 'production') {
this._leServerUrl = letsencrypt.productionServerUrl;
}
else if (this.leEnv === 'staging') {
this._leServerUrl = letsencrypt.stagingServerUrl;
}
// create leInstance
this._leInstance = letsencrypt.create({
server: this._leServerUrl,
2016-10-24 00:24:34 +00:00
challenges: {
2016-10-24 01:26:34 +00:00
'dns-01': this._leChallengeHandler()
2016-10-24 00:24:34 +00:00
},
2016-10-23 22:35:00 +00:00
challengeType: 'dns-01',
2017-01-01 04:18:50 +00:00
store: leStoreInstance,
2016-10-23 23:42:31 +00:00
agreeToTerms: (opts, agreeCb) => {
agreeCb(null, opts.tosUrl);
},
2017-01-01 04:18:50 +00:00
debug: true,
log: function (debug) {
console.info(arguments);
}
2016-10-23 22:35:00 +00:00
});
2016-10-24 01:26:34 +00:00
console.log();
2016-10-23 22:35:00 +00:00
}
/**
* register a domain
*/
registerDomain(domainNameArg) {
plugins.beautylog.log(`trying to register domain ${domainNameArg}`);
let done = q.defer();
2017-01-01 04:18:50 +00:00
plugins.smartfile.fs.ensureDirSync(plugins.path.join(paths.leConfigDir, 'live', domainNameArg));
this._leInstance.check({ domains: [domainNameArg] }).then((cert) => {
console.log(cert);
let opts = {
domains: [domainNameArg],
email: 'domains@lossless.org',
agreeTos: true,
rsaKeySize: 2048,
challengeType: 'dns-01',
duplicate: true
};
if (cert) {
if (true) {
return this._leInstance.renew(opts, cert).catch((err) => {
console.log(err);
});
}
else {
return cert;
}
}
else {
// Register Certificate manually
return this._leInstance.register(opts).catch((err) => {
console.log(err);
});
}
});
2016-10-23 22:35:00 +00:00
return done.promise;
}
// --------------------------------------------
// Translate for official letsencrypt stuff
// --------------------------------------------
_leCopyToDestination(domainNameArg) {
let done = q.defer();
2016-10-24 00:24:34 +00:00
done.resolve();
2016-10-23 22:35:00 +00:00
return done.promise;
}
/**
* translates to the format expected by letsencrypt node implementation
*/
_leChallengeHandler() {
return {
2016-10-23 23:06:27 +00:00
getOptions: () => {
2016-10-23 22:35:00 +00:00
return {
2016-10-24 00:24:34 +00:00
debug: false
2016-10-23 22:35:00 +00:00
};
},
set: (args, domain, challenge, keyAuthorization, cb) => {
let keyAuthDigest = require('crypto')
.createHash('sha256').update(keyAuthorization || '')
.digest('base64')
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=+$/g, '');
this.challengeHandler.setChallenge(domain, keyAuthDigest)
.then(() => {
cb();
});
},
get: (defaults, domain, challenge, cb) => {
console.log(domain);
console.log(challenge);
cb();
},
remove: (args, domain, challenge, cb) => {
this.challengeHandler.cleanChallenge(domain)
.then(() => {
cb();
});
},
2017-01-01 04:18:50 +00:00
loopback: (defaults, domain, token, keyAuthorization, done) => {
2016-10-24 01:26:34 +00:00
done();
2016-10-23 22:35:00 +00:00
},
test: (defaults, domain, challenge, cb) => {
cb();
}
};
}
}
exports.Letsencrypt = Letsencrypt;
2017-01-01 04:18:50 +00:00
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydC5jbGFzc2VzLmxldHNlbmNyeXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2VydC5jbGFzc2VzLmxldHNlbmNyeXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSx1QkFBc0I7QUFDdEIsSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0FBQ3hDLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0FBRXpDLDBDQUF5QztBQUN6QyxzQ0FBcUM7QUFZckMsSUFBSSxhQUFhLEdBQUc7SUFDaEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxXQUFXO0lBQzVCLFdBQVcsRUFBRSxrQ0FBa0M7SUFDL0MsYUFBYSxFQUFFLG9DQUFvQztJQUNuRCxRQUFRLEVBQUUsK0JBQStCO0lBQ3pDLFNBQVMsRUFBRSxnQ0FBZ0M7SUFFM0MsT0FBTyxFQUFFLGdDQUFnQztJQUN6QyxPQUFPLEVBQUUsZ0NBQWdDO0lBRXpDLEtBQUssRUFBRSxJQUFJO0NBQ2QsQ0FBQTtBQUVELElBQUksZUFBZSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUE7QUFFbkQ7SUFRSSxZQUFZLFVBQTBDO1FBQ2xELGtCQUFrQjtRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUE7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQTtRQUNuRCxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUE7UUFFL0IsOEJBQThCO1FBQzlCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQTtRQUN2RCxDQUFDO1FBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFL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