From 71fc0d60913a51a34ee6ab097da8c1f38a62eeef Mon Sep 17 00:00:00 2001 From: James Lambie Date: Mon, 15 Apr 2019 11:02:53 +0100 Subject: [PATCH 1/3] chore: remove greenkeeper --- package.json | 8 -------- 1 file changed, 8 deletions(-) diff --git a/package.json b/package.json index 4fdb2245..09d3239e 100644 --- a/package.json +++ b/package.json @@ -113,14 +113,6 @@ "workspace" ] }, - "greenkeeper": { - "ignore": [ - "sinon", - "mocha", - "lint-staged", - "snyk" - ] - }, "author": "DADI ", "license": "SEE LICENSE IN GPL.md", "snyk": true, From 2413dd75f9cd8a88837ebe29bef47ef9ddceb5f4 Mon Sep 17 00:00:00 2001 From: James Lambie Date: Mon, 15 Apr 2019 11:10:45 +0100 Subject: [PATCH 2/3] chore: update dependencies --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8b7be351..095541d9 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "mocha": "^5.2.0", "nock": "~10.0.0", "nodeunit": "~0.5.1", - "prettier-standard": "~8.0.1", + "prettier-standard": "^9.1.1", "should": "~13.2.0", "sinon": "~2.3.2", "sinon-test": "~1.0.2", From 848b13f9b9e856c2b915785a7b2ac847bb14e2a8 Mon Sep 17 00:00:00 2001 From: James Lambie Date: Mon, 15 Apr 2019 21:59:32 +0100 Subject: [PATCH 3/3] feat: extend config for domain redirect --- config.js | 8 +++- dadi/lib/controller/forceDomain.js | 7 +--- dadi/lib/index.js | 11 +---- test/acceptance/routing.js | 67 ++++++++++++++++++++++++++++-- 4 files changed, 74 insertions(+), 19 deletions(-) diff --git a/config.js b/config.js index e6dc4b8d..305917e7 100644 --- a/config.js +++ b/config.js @@ -378,8 +378,12 @@ const conf = convict({ }, forceDomain: { doc: 'The domain to force requests to', - format: String, - default: '' + format: Object, + default: { + hostname: '', + port: 80, + type: 301 + } } }, security: { diff --git a/dadi/lib/controller/forceDomain.js b/dadi/lib/controller/forceDomain.js index 57de3ae3..70b7faea 100644 --- a/dadi/lib/controller/forceDomain.js +++ b/dadi/lib/controller/forceDomain.js @@ -15,7 +15,7 @@ const forceDomain = function (options) { return next() } - statusCode = newRoute.type === 'temporary' ? 307 : 301 + statusCode = newRoute.type res.writeHead(statusCode, { Location: newRoute.url @@ -36,10 +36,7 @@ const domainRedirect = function (protocol, hostHeader, url, options) { let rewrittenRoute let route - options = Object.assign({}, options, { - protocol: 'http', - type: 'permanent' - }) + options = Object.assign({}, { protocol: 'http', type: 301 }, options) const hostHeaderParts = (hostHeader || '').split(':') const hostname = hostHeaderParts[0] || '' diff --git a/dadi/lib/index.js b/dadi/lib/index.js index 5300735c..dc489871 100755 --- a/dadi/lib/index.js +++ b/dadi/lib/index.js @@ -136,15 +136,8 @@ Server.prototype.start = function (done) { }) // add middleware for domain redirects - if (config.get('rewrites.forceDomain') !== '') { - const domain = config.get('rewrites.forceDomain') - - app.use( - forceDomain({ - hostname: domain, - port: 80 - }) - ) + if (config.get('rewrites.forceDomain.hostname') !== '') { + app.use(forceDomain(config.get('rewrites.forceDomain'))) } app.use(apiMiddleware.handleHostHeader()) diff --git a/test/acceptance/routing.js b/test/acceptance/routing.js index 11b6a27c..72376aa9 100644 --- a/test/acceptance/routing.js +++ b/test/acceptance/routing.js @@ -39,7 +39,9 @@ describe('Routing', done => { protocol: 'http' }, rewrites: { - forceDomain: '' + forceDomain: { + hostname: '' + } } }).then(() => { TestHelper.stopServer(done) @@ -629,7 +631,9 @@ describe('Routing', done => { const configUpdate = { rewrites: { - forceDomain: 'example.com' + forceDomain: { + hostname: 'example.com' + } } } @@ -651,7 +655,9 @@ describe('Routing', done => { const configUpdate = { rewrites: { - forceDomain: 'example.com:81' + forceDomain: { + hostname: 'example.com:81' + } } } @@ -667,5 +673,60 @@ describe('Routing', done => { }) }) }) + + it('should use specified redirect type when configured with rewrites.forceDomain', done => { + const pages = TestHelper.setUpPages() + + const configUpdate = { + rewrites: { + forceDomain: { + hostname: 'example.com', + type: 302 + } + } + } + + TestHelper.updateConfig(configUpdate).then(() => { + TestHelper.startServer(pages).then(() => { + client.get('/test').end((err, res) => { + should.exist(res.headers.location) + res.headers.location.should.eql('http://example.com:80/test') + res.statusCode.should.eql(302) + if (err) return done(err) + done() + }) + }) + }) + }) + + it('should handle a redirect from www to root when configured with rewrites.forceDomain', done => { + const pages = TestHelper.setUpPages() + + const configUpdate = { + rewrites: { + forceDomain: { + hostname: 'example.com', + port: 443, + protocol: 'https', + type: 302 + } + } + } + + TestHelper.updateConfig(configUpdate).then(() => { + TestHelper.startServer(pages).then(() => { + client + .get('/') + .set('Host', 'www.example.com') + .end((err, res) => { + should.exist(res.headers.location) + res.headers.location.should.eql('https://example.com:443/') + res.statusCode.should.eql(302) + if (err) return done(err) + done() + }) + }) + }) + }) }) })