|
|
'use strict'; |
|
|
|
|
|
var assert = require('assert'); |
|
|
var express = require('express'); |
|
|
var request = require('supertest'); |
|
|
var proxy = require('../'); |
|
|
|
|
|
describe('proxies https', function () { |
|
|
|
|
|
this.timeout(10000); |
|
|
|
|
|
var app; |
|
|
|
|
|
beforeEach(function () { |
|
|
app = express(); |
|
|
}); |
|
|
|
|
|
function assertSecureRequest(app, done) { |
|
|
request(app) |
|
|
.get('/get?show_env=1') |
|
|
.end(function (err, res) { |
|
|
if (err) { return done(err); } |
|
|
assert(res.body.headers['X-Forwarded-Port'] === '443', 'Expects forwarded 443 Port'); |
|
|
assert(res.body.headers['X-Forwarded-Proto'] === 'https', 'Expects forwarded protocol to be https'); |
|
|
done(); |
|
|
}); |
|
|
} |
|
|
|
|
|
describe('when host is a String', function () { |
|
|
describe('and includes "https" as protocol', function () { |
|
|
it('proxys via https', function (done) { |
|
|
app.use(proxy('https://httpbin.org')); |
|
|
assertSecureRequest(app, done); |
|
|
}); |
|
|
}); |
|
|
describe('option https is set to "true"', function () { |
|
|
it('proxys via https', function (done) { |
|
|
app.use(proxy('http://httpbin.org', { https: true })); |
|
|
assertSecureRequest(app, done); |
|
|
}); |
|
|
}); |
|
|
}); |
|
|
|
|
|
describe('when host is a Function', function () { |
|
|
describe('returned value includes "https" as protocol', function () { |
|
|
it('proxys via https', function (done) { |
|
|
app.use(proxy(function () { return 'https://httpbin.org'; })); |
|
|
assertSecureRequest(app, done); |
|
|
}); |
|
|
}); |
|
|
describe('option https is set to "true"', function () { |
|
|
it('proxys via https', function (done) { |
|
|
app.use(proxy(function () { return 'http://httpbin.org'; }, { https: true })); |
|
|
assertSecureRequest(app, done); |
|
|
}); |
|
|
}); |
|
|
}); |
|
|
|
|
|
}); |
|
|
|