AJ ONeal
9 years ago
10 changed files with 322 additions and 250 deletions
@ -0,0 +1,59 @@ |
|||
'use strict'; |
|||
|
|||
var homedir = require('homedir'); |
|||
var leBinPath = homedir() + '/.local/share/letsencrypt/bin/letsencrypt'; |
|||
var lep = require('letsencrypt-python').create(leBinPath); |
|||
var conf = { |
|||
domains: process.argv[2] |
|||
, email: process.argv[3] |
|||
, agree: process.argv[4] |
|||
}; |
|||
|
|||
// backend-specific defaults
|
|||
// Note: For legal reasons you should NOT set email or agreeTos as a default
|
|||
var bkDefaults = { |
|||
webroot: true |
|||
, webrootPath: __dirname + '/acme-challenge' |
|||
, fullchainTpl: '/live/:hostname/fullchain.pem' |
|||
, privkeyTpl: '/live/:hostname/fullchain.pem' |
|||
, configDir: '/etc/letsencrypt' |
|||
, logsDir: '/var/log/letsencrypt' |
|||
, workDir: '/var/lib/letsencrypt' |
|||
, text: true |
|||
}; |
|||
var le = require('letsencrypt').create(lep, bkDefaults); |
|||
|
|||
var localCerts = require('localhost.daplie.com-certificates'); |
|||
var express = require('express'); |
|||
var app = express(); |
|||
|
|||
app.use(le.middleware); |
|||
|
|||
var server = require('http').createServer(); |
|||
server.on('request', app); |
|||
server.listen(80, function () { |
|||
console.log('Listening http', server.address()); |
|||
}); |
|||
|
|||
var tlsServer = require('https').createServer({ |
|||
key: localCerts.key |
|||
, cert: localCerts.cert |
|||
, SNICallback: le.SNICallback |
|||
}); |
|||
tlsServer.on('request', app); |
|||
tlsServer.listen(443, function () { |
|||
console.log('Listening http', tlsServer.address()); |
|||
}); |
|||
|
|||
le.register('certonly', { |
|||
agreeTos: 'agree' === conf.agree |
|||
, domains: conf.domains.split(',') |
|||
, email: conf.email |
|||
}).then(function () { |
|||
console.log('success'); |
|||
}, function (err) { |
|||
console.error(err.stack); |
|||
}).then(function () { |
|||
server.close(); |
|||
tlsServer.close(); |
|||
}); |
@ -1,131 +0,0 @@ |
|||
'use strict'; |
|||
|
|||
var PromiseA = require('bluebird'); |
|||
var spawn = require('child_process').spawn; |
|||
|
|||
var letsencrypt = module.exports; |
|||
|
|||
letsencrypt.parseOptions = function (text) { |
|||
var options = {}; |
|||
var re = /--([a-z0-9\-]+)/g; |
|||
var m; |
|||
|
|||
function uc(match, c) { |
|||
return c.toUpperCase(); |
|||
} |
|||
|
|||
while ((m = re.exec(text))) { |
|||
var key = m[1].replace(/-([a-z0-9])/g, uc); |
|||
|
|||
options[key] = true; |
|||
} |
|||
|
|||
return options; |
|||
}; |
|||
|
|||
letsencrypt.opts = function (lebinpath, cb) { |
|||
letsencrypt.exec(lebinpath, ['--help', 'all'], function (err, text) { |
|||
if (err) { |
|||
cb(err); |
|||
return; |
|||
} |
|||
|
|||
cb(null, Object.keys(letsencrypt.parseOptions(text))); |
|||
}); |
|||
}; |
|||
|
|||
letsencrypt.exec = function (lebinpath, args, opts, cb) { |
|||
// TODO create and watch the directory for challenge callback
|
|||
if (opts.challengeCallback) { |
|||
return PromiseA.reject({ |
|||
message: "challengeCallback not yet supported" |
|||
}); |
|||
} |
|||
|
|||
var le = spawn(lebinpath, args, { stdio: ['ignore', 'pipe', 'pipe'] }); |
|||
var text = ''; |
|||
var errtext = ''; |
|||
var err; |
|||
|
|||
le.on('error', function (error) { |
|||
err = error; |
|||
}); |
|||
|
|||
le.stdout.on('data', function (chunk) { |
|||
text += chunk.toString('ascii'); |
|||
}); |
|||
|
|||
le.stderr.on('data', function (chunk) { |
|||
errtext += chunk.toString('ascii'); |
|||
}); |
|||
|
|||
le.on('close', function (code, signal) { |
|||
if (err) { |
|||
cb(err); |
|||
return; |
|||
} |
|||
|
|||
if (errtext) { |
|||
err = new Error(errtext); |
|||
err.code = code; |
|||
err.signal = signal; |
|||
cb(err); |
|||
return; |
|||
} |
|||
|
|||
if (0 !== code) { |
|||
err = new Error("exited with code '" + code + "'"); |
|||
err.code = code; |
|||
err.signal = signal; |
|||
cb(err); |
|||
return; |
|||
} |
|||
|
|||
cb(null, text); |
|||
}); |
|||
}; |
|||
|
|||
letsencrypt.objToArr = function (params, opts) { |
|||
var args = {}; |
|||
var arr = []; |
|||
|
|||
Object.keys(opts).forEach(function (key) { |
|||
var val = opts[key]; |
|||
|
|||
if (!val && 0 !== val) { |
|||
// non-zero value which is false, null, or otherwise falsey
|
|||
// falsey values should not be passed
|
|||
return; |
|||
} |
|||
|
|||
if (!params.indexOf(key)) { |
|||
// key is not recognized by the python client
|
|||
return; |
|||
} |
|||
|
|||
if (Array.isArray(val)) { |
|||
args[key] = opts[key].join(','); |
|||
} else { |
|||
args[key] = opts[key]; |
|||
} |
|||
}); |
|||
|
|||
Object.keys(args).forEach(function (key) { |
|||
if ('tlsSni01Port' === key) { |
|||
arr.push('--tls-sni-01-port'); |
|||
} |
|||
else if ('http01Port' === key) { |
|||
arr.push('--http-01-port'); |
|||
} |
|||
else { |
|||
arr.push('--' + key.replace(/([A-Z])/g, '-$1').toLowerCase()); |
|||
} |
|||
|
|||
if (true !== opts[key]) { |
|||
// value is truthy, but not true (and falsies were weeded out above)
|
|||
arr.push(opts[key]); |
|||
} |
|||
}); |
|||
|
|||
return arr; |
|||
}; |
@ -1,40 +0,0 @@ |
|||
'use strict'; |
|||
|
|||
cacheIpAddresses |
|||
|
|||
var https = require('https'); |
|||
var http = require('http'); |
|||
var letsencrypt = require('letsencrypt'); |
|||
var localCerts = require('localhost.daplie.com-certificates'); |
|||
var insecureServer; |
|||
var server; |
|||
|
|||
letsencrypt.create( |
|||
'/home/user/.local/share/letsencrypt/bin/letsencrypt' |
|||
// set some defaults
|
|||
, { "": "" |
|||
} |
|||
).then(function (le) { |
|||
|
|||
var express = require('express'); |
|||
var app = express(); |
|||
var getSecureContext = require('./le-standalone').getSecureContext; |
|||
|
|||
insecureServer = http.createServer(); |
|||
localCerts.sniCallback = function (hostname, cb) { |
|||
getSecureContext(le, hostname, cb); |
|||
}; |
|||
server = https.createServer(localCerts); |
|||
|
|||
insecureServer.on('request', app); |
|||
|
|||
server.on('request', app); |
|||
}); |
|||
|
|||
insecureServer.listen(80, function () { |
|||
console.log('http server listening', insecureServer.address()); |
|||
}); |
|||
|
|||
server.listen(443, function () { |
|||
console.log('https server listening', server.address()); |
|||
}); |
Loading…
Reference in new issue