minor bugfixes for node v6
This commit is contained in:
parent
78fcebd567
commit
8ba4b88e00
|
@ -48,6 +48,7 @@ and **node.js middleware systems**.
|
||||||
- [x] Let's Encrypt v2
|
- [x] Let's Encrypt v2
|
||||||
- [x] Let's Encrypt v1
|
- [x] Let's Encrypt v1
|
||||||
- [x] Full node.js support
|
- [x] Full node.js support
|
||||||
|
- [x] node v6+
|
||||||
- [x] core https module
|
- [x] core https module
|
||||||
- [x] Express.js
|
- [x] Express.js
|
||||||
- [x] [Koa](https://git.rootprojects.org/root/greenlock-koa.js)
|
- [x] [Koa](https://git.rootprojects.org/root/greenlock-koa.js)
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
function requireBluebird() {
|
||||||
|
try {
|
||||||
|
return require('bluebird');
|
||||||
|
} catch(e) {
|
||||||
|
console.error("");
|
||||||
|
console.error("DON'T PANIC. You're running an old version of node with incomplete Promise support.");
|
||||||
|
console.error("EASY FIX: `npm install --save bluebird`");
|
||||||
|
console.error("");
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ('undefined' === typeof Promise) {
|
||||||
|
global.Promise = requireBluebird();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ('function' !== typeof require('util').promisify) {
|
||||||
|
require('util').promisify = requireBluebird().promisify;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!console.debug) {
|
||||||
|
console.debug = console.log;
|
||||||
|
}
|
||||||
|
|
||||||
|
var fs = require('fs');
|
||||||
|
var fsAsync = {};
|
||||||
|
Object.keys(fs).forEach(function (key) {
|
||||||
|
var fn = fs[key];
|
||||||
|
if ('function' !== typeof fn || !/[a-z]/.test(key[0])) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fsAsync[key] = require('util').promisify(fn);
|
||||||
|
});
|
||||||
|
|
||||||
|
exports.fsAsync = fsAsync;
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "greenlock-express",
|
"name": "greenlock-express",
|
||||||
"version": "2.7.8",
|
"version": "2.7.9",
|
||||||
"description": "Free SSL and managed or automatic HTTPS for node.js with Express, Koa, Connect, Hapi, and all other middleware systems.",
|
"description": "Free SSL and managed or automatic HTTPS for node.js with Express, Koa, Connect, Hapi, and all other middleware systems.",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"homepage": "https://greenlock.domains",
|
"homepage": "https://greenlock.domains",
|
||||||
|
@ -8,7 +8,7 @@
|
||||||
"example": "examples"
|
"example": "examples"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"greenlock": "^2.7.17",
|
"greenlock": "^2.7.24",
|
||||||
"redirect-https": "^1.1.5"
|
"redirect-https": "^1.1.5"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
|
|
31
server.js
31
server.js
|
@ -21,7 +21,7 @@ var config = require(configpath);
|
||||||
// For example: whatever.com may live in /srv/www/whatever.com, thus /srv/www is our path
|
// For example: whatever.com may live in /srv/www/whatever.com, thus /srv/www is our path
|
||||||
|
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
var fs = require('fs').promises;
|
var fs = require('./lib/compat.js').fsAsync;
|
||||||
var finalhandler = require('finalhandler');
|
var finalhandler = require('finalhandler');
|
||||||
var serveStatic = require('serve-static');
|
var serveStatic = require('serve-static');
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ var glx = require('./').create({
|
||||||
//, communityMember: true // Join Greenlock to get important updates, no spam
|
//, communityMember: true // Join Greenlock to get important updates, no spam
|
||||||
|
|
||||||
//, debug: true
|
//, debug: true
|
||||||
, store: require('le-store-fs')
|
, store: require('greenlock-store-fs')
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ server.on('listening', function () {
|
||||||
});
|
});
|
||||||
|
|
||||||
function myApproveDomains(opts) {
|
function myApproveDomains(opts) {
|
||||||
console.log(opts.domain);
|
console.info("SNI:", opts.domain);
|
||||||
// In this example the filesystem is our "database".
|
// In this example the filesystem is our "database".
|
||||||
// We check in /srv/www for whatever.com and if it exists, it's allowed
|
// We check in /srv/www for whatever.com and if it exists, it's allowed
|
||||||
// SECURITY Greenlock validates opts.domains ahead-of-time so you don't have to
|
// SECURITY Greenlock validates opts.domains ahead-of-time so you don't have to
|
||||||
|
@ -66,19 +66,13 @@ function myApproveDomains(opts) {
|
||||||
var domains = [];
|
var domains = [];
|
||||||
var domain = opts.domain.replace(/^(www|api)\./, '');
|
var domain = opts.domain.replace(/^(www|api)\./, '');
|
||||||
return checkWwws(domain).then(function (hostname) {
|
return checkWwws(domain).then(function (hostname) {
|
||||||
// tried both permutations already (failed first, succeeded second)
|
// this is either example.com or www.example.com
|
||||||
if (hostname !== domain) {
|
domains.push(hostname);
|
||||||
domains.push(hostname);
|
if ('api.' + domain !== opts.domain) {
|
||||||
return;
|
if (!domains.includes(opts.domain)) {
|
||||||
}
|
domains.push(opts.domain)
|
||||||
|
|
||||||
// only tried the bare domain, let's try www too
|
|
||||||
domains.push(domain);
|
|
||||||
return checkWwws('www.' + domain).then(function (hostname) {
|
|
||||||
if (hostname === domain) {
|
|
||||||
domains.push(domain);
|
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
}).catch(function () {
|
}).catch(function () {
|
||||||
// ignore error
|
// ignore error
|
||||||
return null;
|
return null;
|
||||||
|
@ -88,7 +82,8 @@ function myApproveDomains(opts) {
|
||||||
if (domains.length) {
|
if (domains.length) {
|
||||||
apiname = 'api.' + domain;
|
apiname = 'api.' + domain;
|
||||||
}
|
}
|
||||||
return checkApi(apiname).then(function () {
|
return checkApi(apiname).then(function (app) {
|
||||||
|
if (!app) { return null; }
|
||||||
domains.push(apiname);
|
domains.push(apiname);
|
||||||
}).catch(function () {
|
}).catch(function () {
|
||||||
return null;
|
return null;
|
||||||
|
@ -98,6 +93,8 @@ function myApproveDomains(opts) {
|
||||||
return Promise.reject(new Error("no bare, www., or api. domain matching '" + opts.domain + "'"));
|
return Promise.reject(new Error("no bare, www., or api. domain matching '" + opts.domain + "'"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.info('Approved domains:', domains);
|
||||||
|
opts.domains = domains;
|
||||||
//opts.email = email;
|
//opts.email = email;
|
||||||
opts.agreeTos = true;
|
opts.agreeTos = true;
|
||||||
// pick the shortest (bare) or latest (www. instead of api.) to be the subject
|
// pick the shortest (bare) or latest (www. instead of api.) to be the subject
|
||||||
|
@ -176,7 +173,7 @@ function checkWwws(_hostname) {
|
||||||
function myVhostApp(req, res) {
|
function myVhostApp(req, res) {
|
||||||
// SECURITY greenlock pre-sanitizes hostnames to prevent unauthorized fs access so you don't have to
|
// SECURITY greenlock pre-sanitizes hostnames to prevent unauthorized fs access so you don't have to
|
||||||
// (also: only domains approved above will get here)
|
// (also: only domains approved above will get here)
|
||||||
console.info(req.method, (req.headers.host|'') + req.url);
|
console.info(req.method, (req.headers.host||'') + req.url);
|
||||||
Object.keys(req.headers).forEach(function (key) {
|
Object.keys(req.headers).forEach(function (key) {
|
||||||
console.info(key, req.headers[key])
|
console.info(key, req.headers[key])
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue