fix non-ssl redirect bug
This commit is contained in:
parent
fb0505881e
commit
dc816f6749
|
@ -1,5 +1,5 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var https = require('https')
|
var https = require('https')
|
||||||
, http = require('http')
|
, http = require('http')
|
||||||
, PromiseA = require('bluebird').Promise
|
, PromiseA = require('bluebird').Promise
|
||||||
|
@ -9,6 +9,7 @@ var https = require('https')
|
||||||
, crypto = require('crypto')
|
, crypto = require('crypto')
|
||||||
, connect = require('connect')
|
, connect = require('connect')
|
||||||
, vhost = require('vhost')
|
, vhost = require('vhost')
|
||||||
|
, escapeRe = require('escape-string-regexp')
|
||||||
|
|
||||||
// connect / express app
|
// connect / express app
|
||||||
, app = connect()
|
, app = connect()
|
||||||
|
@ -95,6 +96,10 @@ secureServer.listen(securePort, function () {
|
||||||
console.log("Listening on https://localhost:" + secureServer.address().port);
|
console.log("Listening on https://localhost:" + secureServer.address().port);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// TODO localhost-only server shutdown mechanism
|
||||||
|
// that closes all sockets, waits for them to finish,
|
||||||
|
// and then hands control over completely to respawned server
|
||||||
|
|
||||||
//
|
//
|
||||||
// Redirect HTTP ot HTTPS
|
// Redirect HTTP ot HTTPS
|
||||||
//
|
//
|
||||||
|
@ -102,8 +107,37 @@ secureServer.listen(securePort, function () {
|
||||||
//
|
//
|
||||||
insecureServer = http.createServer();
|
insecureServer = http.createServer();
|
||||||
insecureServer.on('request', function (req, res) {
|
insecureServer.on('request', function (req, res) {
|
||||||
|
var insecureRedirects;
|
||||||
|
var host = req.headers.host || '';
|
||||||
|
var url = req.url;
|
||||||
|
|
||||||
|
// because I have domains for which I don't want to pay for SSL certs
|
||||||
|
insecureRedirects = require('./redirects.json').sort(function (a, b) {
|
||||||
|
var hlen = b.from.hostname.length - a.from.hostname.length;
|
||||||
|
var plen;
|
||||||
|
if (!hlen) {
|
||||||
|
plen = b.from.path.length - a.from.path.length;
|
||||||
|
return plen;
|
||||||
|
}
|
||||||
|
return hlen;
|
||||||
|
}).forEach(function (redirect) {
|
||||||
|
var origHost = host;
|
||||||
|
// TODO if '*' === hostname[0], omit '^'
|
||||||
|
host = host.replace(
|
||||||
|
new RegExp('^' + escapeRe(redirect.from.hostname))
|
||||||
|
, redirect.to.hostname
|
||||||
|
);
|
||||||
|
if (host === origHost) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
url = url.replace(
|
||||||
|
new RegExp('^' + escapeRe(redirect.from.path))
|
||||||
|
, redirect.to.path
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
var newLocation = 'https://'
|
var newLocation = 'https://'
|
||||||
+ req.headers.host.replace(/:\d+/, ':' + port) + req.url
|
+ host.replace(/:\d+/, ':' + securePort) + url
|
||||||
;
|
;
|
||||||
|
|
||||||
var metaRedirect = ''
|
var metaRedirect = ''
|
||||||
|
|
Loading…
Reference in New Issue