-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.js
75 lines (56 loc) · 1.32 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
const fs = require('fs')
const rocky = require('rocky')
const morgan = require('morgan')
module.exports = balboa
/**
* Proxy server factory
*/
function balboa(opts) {
opts = opts || {}
if (opts.ssl) {
return balboa.proxySSL(opts)
}
return balboa.proxy(opts)
}
/**
* Creates a new proxy
*/
balboa.proxy = function (opts) {
const proxy = rocky(opts)
// Expose the default route
if (!opts.noroute) proxy.route = proxy.routeAll()
// Register middleware functions
if (!opts.mute) proxy.use(morgan('combined'))
proxy.useForward(forwardToTarget(opts.ssl ? 'https' : 'http'))
// Start listening if port was defined
if (+opts.port) proxy.listen(opts.port)
return proxy
}
/**
* Creates a SSL proxy
*/
balboa.proxySSL = function (opts) {
if (!opts || !opts.ssl) {
throw new TypeError('Missing required ssl options')
}
return balboa.proxy(opts)
}
/**
* Exports the current version
*/
balboa.VERSION = require('./package.json').version
/**
* Exports Rocky proxy
*/
balboa.rocky = rocky
/**
* Forward to target middleware
*/
function forwardToTarget(protocol) {
return function (req, res, next) {
if (!req.headers.host) return next({ message: 'Missing host header' })
req.rocky.options.target = protocol + '://' + req.headers.host
req.rocky.options.secure = false
next()
}
}