swagger: honour X-Forwarded-Proto header

Improve the algorithm building `baseUrl` to honour `X-Forwarded-Proto`
header when it is present.
This commit is contained in:
Miroslav Bajtoš 2014-10-22 11:10:15 +02:00
parent d18d64b41d
commit a4179e454a
2 changed files with 14 additions and 2 deletions

View File

@ -166,9 +166,9 @@ function addRoute(app, uri, doc, opts) {
if (hasBasePath) {
var headers = req.headers;
// NOTE header names (keys) are always all-lowercase
var proto = headers['x-forwarded-proto'] || opts.protocol || req.protocol;
var host = headers['x-forwarded-host'] || headers.host;
doc.basePath = (opts.protocol || req.protocol) + '://' +
host + initialPath;
doc.basePath = proto + '://' + host + initialPath;
}
res.status(200).send(doc);
});

View File

@ -93,6 +93,18 @@ describe('swagger definition', function() {
done();
});
});
it('respects X-Forwarded-Proto header (behind a proxy)', function(done) {
var app = givenAppWithSwagger();
getAPIDeclaration(app, 'products')
.set('X-Forwarded-Proto', 'https')
.end(function(err, res) {
if (err) return done(err);
var baseUrl = url.parse(res.body.basePath);
expect(baseUrl.protocol).to.equal('https:');
done();
});
});
});
describe('Model definition attributes', function() {