|
|
@ -1,8 +1,10 @@ |
|
|
|
'use strict'; |
|
|
|
|
|
|
|
var PromiseA = require('bluebird'); |
|
|
|
var mkdirpAsync = PromiseA.promisify(require('mkdirp')); |
|
|
|
var path = require('path'); |
|
|
|
var fs = PromiseA.promisifyAll(require('fs')); |
|
|
|
var sfs = require('safe-replace'); |
|
|
|
|
|
|
|
var LE = require('../'); |
|
|
|
var LeCore = PromiseA.promisifyAll(require('letiny-core')); |
|
|
@ -22,19 +24,13 @@ function getAcmeUrls(args) { |
|
|
|
|
|
|
|
return LeCore.getAcmeUrlsAsync(args.server).then(function (data) { |
|
|
|
ipc.acmeUrlsUpdatedAt = Date.now(); |
|
|
|
ipc.acmeUrls = { |
|
|
|
newAuthz: data['new-authz'] |
|
|
|
, newCert: data['new-cert'] |
|
|
|
, newReg: data['new-reg'] |
|
|
|
, revokeCert: data['revoke-cert'] |
|
|
|
}; |
|
|
|
ipc.acmeUrls = data; |
|
|
|
|
|
|
|
return ipc.acmeUrls; |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
function createAccount(args, handlers) { |
|
|
|
var mkdirpAsync = PromiseA.promisify(require('mkdirp')); |
|
|
|
var os = require("os"); |
|
|
|
var localname = os.hostname(); |
|
|
|
|
|
|
@ -45,14 +41,15 @@ function createAccount(args, handlers) { |
|
|
|
|
|
|
|
return LeCore.registerNewAccountAsync({ |
|
|
|
email: args.email |
|
|
|
, newReg: args._acmeUrls.newReg |
|
|
|
, debug: args.debug || handlers.debug |
|
|
|
, newRegUrl: args._acmeUrls.newReg |
|
|
|
, agreeToTerms: function (tosUrl, agree) { |
|
|
|
// args.email = email; // already there
|
|
|
|
args.tosUrl = tosUrl; |
|
|
|
handlers.agreeToTerms(args, agree); |
|
|
|
} |
|
|
|
, accountPrivateKeyPem: pems.privateKeyPem |
|
|
|
|
|
|
|
, debug: args.debug || handlers.debug |
|
|
|
}).then(function (body) { |
|
|
|
var accountDir = path.join(args.accountsDir, pems.publicKeyMd5); |
|
|
|
|
|
|
@ -144,21 +141,14 @@ function getCertificateAsync(account, args, defaults, handlers) { |
|
|
|
var pyconf = PromiseA.promisifyAll(require('pyconf')); |
|
|
|
|
|
|
|
return leCrypto.generateRsaKeypairAsync(args.rsaBitLength, args.rsaExponent).then(function (domain) { |
|
|
|
return lef.getCertificateAsyncAsync({ |
|
|
|
newAuthorizationUrl: args._acmeUrls.newAuthz |
|
|
|
, newCertificateUrl: args._acmeUrls.newCert |
|
|
|
return LeCore.getCertificateAsync({ |
|
|
|
newAuthzUrl: args._acmeUrls.newAuthz |
|
|
|
, newCertUrl: args._acmeUrls.newCert |
|
|
|
|
|
|
|
, accountPrivateKeyPem: account.privateKeyPem |
|
|
|
, domainPrivateKeyPem: domain.privateKeyPem |
|
|
|
, domains: args.domains |
|
|
|
|
|
|
|
/* |
|
|
|
, getChallenge: function (domain, key, done) { |
|
|
|
args.domains = [domain]; |
|
|
|
args.webrootPath = args.webrootPath || defaults.webrootPath; |
|
|
|
handlers.getChallenge(args, key, done); |
|
|
|
} |
|
|
|
*/ |
|
|
|
, setChallenge: function (domain, key, value, done) { |
|
|
|
args.domains = [domain]; |
|
|
|
args.webrootPath = args.webrootPath || defaults.webrootPath; |
|
|
@ -181,7 +171,7 @@ function getCertificateAsync(account, args, defaults, handlers) { |
|
|
|
|
|
|
|
// TODO write to archive first, then write to live
|
|
|
|
return mkdirpAsync(liveDir).then(function () { |
|
|
|
return PromisA.all([ |
|
|
|
return PromiseA.all([ |
|
|
|
sfs.writeFileAsync(certPath, result.cert, 'ascii') |
|
|
|
, sfs.writeFileAsync(chainPath, result.chain, 'ascii') |
|
|
|
, sfs.writeFileAsync(fullchainPath, result.fullchain, 'ascii') |
|
|
@ -198,11 +188,13 @@ function getCertificateAsync(account, args, defaults, handlers) { |
|
|
|
|
|
|
|
function registerWithAcme(args, defaults, handlers) { |
|
|
|
var pyconf = PromiseA.promisifyAll(require('pyconf')); |
|
|
|
var server = args.server || defaults.server || LE.liveServer; // https://acme-v01.api.letsencrypt.org/directory
|
|
|
|
var server = args.server || defaults.server || LeCore.stagingServerUrl; // https://acme-v01.api.letsencrypt.org/directory
|
|
|
|
var acmeHostname = require('url').parse(server).hostname; |
|
|
|
var configDir = args.configDir || defaults.configDir || LE.configDir; |
|
|
|
|
|
|
|
args.server = server; |
|
|
|
console.log('args.server'); |
|
|
|
console.log(server); |
|
|
|
args.renewalDir = args.renewalDir || path.join(configDir, 'renewal', args.domains[0] + '.conf'); |
|
|
|
args.accountsDir = args.accountsDir || path.join(configDir, 'accounts', acmeHostname, 'directory'); |
|
|
|
|
|
|
@ -212,7 +204,7 @@ function registerWithAcme(args, defaults, handlers) { |
|
|
|
|
|
|
|
return accountId; |
|
|
|
}, function (err) { |
|
|
|
if ("EENOENT" === err.code) { |
|
|
|
if ("ENOENT" === err.code) { |
|
|
|
return getAccountByEmail(args, handlers); |
|
|
|
} |
|
|
|
|
|
|
|