Add ability to run a https server
This commit is contained in:
parent
795d31f89f
commit
b7314643cc
52
config/cert.example.key
Normal file
52
config/cert.example.key
Normal file
@ -0,0 +1,52 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQDATKpo+Hn+GlIr
|
||||
HI80SXIZOqgNBlgfHzfpKc6J/7Y/C/tUALO81jLHIWfQJ/S0bjmEPcn0Q/N8LVv2
|
||||
RfXWZOgQSUhP1U64CzG+0jAE8jiuTKoWqOuS832l32kg12P56H+1IHkDRMsSobs6
|
||||
otEtJzrX5HrW6yAx9BQXEqBRA7EA43HXAA/3Z6bIIpwo1V4xVbWcrxMmSRIA9Ksw
|
||||
rTJWygNIu+/oR8DdON63gpYNGgKKhsjCt22ji3FmI0D2fCZdIB7ANXYg4KMxdlh7
|
||||
lu8+lA24ny4JDUiQpcFvUBfJ+QIST2mw2Ba0cSgavL/ZxHElWhuXKkLAeKs7EG8y
|
||||
LNChmwo+N8QAQ1EoNRtUH4HzMdWxvppSezv5YecrfAjE+Fp7S2qYMlGl8exMDdry
|
||||
9YGMoMVnXZIqJ7V73sYSup4igpGCn8qneHEnCRRMS5Py245hnKqV0Qo5UBb6Kx7c
|
||||
o2UjVQ/Ul1//On+9YbrCVTceKIDeYdt05T+BkbSdye2nh98odiV8/ZpyfAHnEVl7
|
||||
hTyAq7m7wstuZS8E1BEwDYB5kh26Sq+oNHpOKYfvMjSsF4sRELgMmOEg/vRAKNY9
|
||||
uPa8+ASl01idxHxTMFDYN2mwYBwmWZsig9TEqlgpGiXUWSjbNY3Hfz2WMuLpQbVI
|
||||
zrBSCsj0Os/7JG2hXg/xdZSvZRpJCwIDAQABAoICAQCwysswzqB5eQFqGUufKpb3
|
||||
kvHFZ7vEgRMKDiGQxcNrmzxpMmwMhHESmiezO8jByUSfy57ML1y/IYSWmiM2BHdF
|
||||
4dnVa6p/keseIGd9ZKOvu1P0mUBbTfiKcydXxi5oJ9ShVUVsN+brLj3P3rio5pQ2
|
||||
wBwfUvO6eUevHrS9RsOIqZKTs776GhU/knI3KFL80GuzrVHRtQQUVNy+V70cBYWX
|
||||
bRFXYAB0YkCAPlJtoSgM63XPbowh+6U53ddvxRwQKeObmosMFvpyEveuSEmUItGq
|
||||
ls3gDJJWSc3Y5K26RnAdHV1x9HiLVC0mx7kqIGxVhs4u3++WvFnQZ3+ThZgZu0xh
|
||||
5wvUVYne8RE3QO+VqCk3aTtbQqlD43lw1b3kiwW+FUHT/pEPlp2V2fCCl+A49KDX
|
||||
JMj+sxP9zqrOkuQjOC3aBAtVA0y0jbqrZa3QkK4e+6OYrGYX1wXlszT2E2rL81+N
|
||||
DJ1pQyjIMx9IWDsn1aP8AceRKTOir/ScgmA5umH7bYq8Dg3crf13J3STpg2Qw3SV
|
||||
UtKTARuVcCOptv8MNJ0/jIDZ/O5Rdqn0Qy60+yM/jI7Dmu06AnpUP73HqHdLcr5I
|
||||
Q7LoK4xCjtEiJ11K0TwU/FXaBHvHpdgUVj+rZS+bimqK2483xuMJAIm/5fLcj2SR
|
||||
/Hn0aL5ft9thccbLApCjYQKCAQEA4/hWuu3Gg+NtGGemeognRNgB23HKLoNHcUR9
|
||||
k82E6mxb0uj2Y3ITF9lELwUHwGpPno89GkFAA/AT584A4Rcd77t65eXBbR/vrJuq
|
||||
0f5yKFaNmytip2qvbIKl+Ieb+owD85A09JegDqEAgk7VdmpfbAB4yZASkcsmczvK
|
||||
uUsUGvAtEn9uwAqgghvslRCBP9TuluzcjwWzocYmDY/q4LnxU6Dby7xrBPdislOj
|
||||
5lsQnvpQHiuykLTG11hnbHKQkw291sC2kQLjLmhLs+WI05W1toZ/NSMHMlrMXx1J
|
||||
d6eYQu+CpNIAxYFjBzVpCYBJ/NfbZlgCmS2kiypDlR3VDeM6vQKCAQEA1/GMIAcc
|
||||
toDT7tJHlaPYRQckzT/8IHOpPekzLnZAhD3gu4B8rI3ZnpKiHLm7h5TyGDxwsp6q
|
||||
0p/k5gGUJMd1Jep1tX8cJS2DHSNAwLWDbMV5aoKWSwEuK7nDTUTCwoc2VsdRiUAV
|
||||
umZxLuwFzH/TYq2T8NY3oXje08bm+d3diBEN8HfHvdOHmLmYAKKYi25osqAfCOX4
|
||||
lY7TTDG82oMfpoynrL0UDRRixXHzOqck7xsFzor9ezJo8WzyQ3qwvrnqEZYIwZ8B
|
||||
UjIISc12f4/7XicVtbHxiQ3a+otzQPjAldUFuUmhQ5g3M8ZRVYRRQrUUrbyTu8J5
|
||||
tnNubbGv7oIzZwKCAQAc6OZeyD6PhSzVlndnPJL2SQpbQN/p7B4IQC5Iqxx6+gjf
|
||||
A0oTrGi9coESEWo9PX4hVnriNHogxbZQhDBaWyshtr3MH8naw90KH6eW/9SMRwWo
|
||||
MuVM49uhQCQ6E0B1koIBxjzg88WJdWNyIvsxDCZTtO+caBfiw0d5/5Ai1WGUVPby
|
||||
TJTH59EZDt9+u9wYMzGalCkYPhncnxs+Rwz7OLlg6JpXCOrtc03h3XeAg/Xko0u7
|
||||
t8DqVvKMZpqfBxxMecakUEYWt64FuZY4Fxi19FtZ7U5+d5W3Dgqy2Szy7p8Bhgwk
|
||||
SLluUo0zYdOTL+CyHtGk9e5GbKJcP5zYcTMOks1lAoIBAH/Cgzr3uj8n3Tuw4XVh
|
||||
KLU+UsG0l4DDrV/ZttRIVkdnLK0CicC1dAlji9Ie+RpwPwOjzrF/OmW+//gs+u7/
|
||||
qwmxu86T050TXj1A/DCHs6gI9ZrUhAMAQcbQ8wGmKuxYfwe8iTsA1Vog/dna/ltN
|
||||
TU1WkO6ubt9z2bHGPiWa5FR6cprQ4zYmDlWHiKznhgUIX50/Kt1i4j3p8I1l5+wI
|
||||
JBOvqAyFGXXbl8xlbJhJB4sHm9nlVa8r1fbwlCzkS+mrqRaag7e6UVfGDi1MCE3U
|
||||
a836pdeH3fVOYz5Ufu3zvk1naSmErIqHZjGVpc1IqaMj64YWyfkOSGBvzufLduFP
|
||||
2wUCggEASYJzWdxdBimzWjuT+MZ7/aYc9Mced90+mhMarrnl8ExDR0tdYAaeJrLs
|
||||
gvdPSZcaFxYvWifQjET2u1m7MfPmZ1L09C5jRjbqVel5JLavYWOzzo2oYj/laf2t
|
||||
MeXKcjL5FPOLNei4t9OmdYE7Pv/dz96N9xTzLHR/Zga1OUdyYVZPxswp2yRqgV+N
|
||||
9Jl/uXbEonhyp6iQYAjVNq74v3Z8t0WPnm4rhC6GWKCaQ+V1Ou2JzzXIean/Q8oD
|
||||
jS4ZoOnOkQYeREvqUYvMjJKXG2ALTm5PMtty4IrWGat4CxYisO/zGDa+dPVuZTLe
|
||||
4MxVSbHK6i+Bkr05nxAvsYbvTy7Nlw==
|
||||
-----END PRIVATE KEY-----
|
||||
34
config/cert.example.pem
Normal file
34
config/cert.example.pem
Normal file
@ -0,0 +1,34 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIF9jCCA96gAwIBAgIJAJAioL94c2hZMA0GCSqGSIb3DQEBCwUAMIGPMQswCQYD
|
||||
VQQGEwJVUzELMAkGA1UECAwCTlkxETAPBgNVBAcMCE5ldyBZb3JrMRMwEQYDVQQK
|
||||
DApQZWVyIENhbGxzMRMwEQYDVQQLDApQZWVyIENhbGxzMRIwEAYDVQQDDAlwZWVy
|
||||
Y2FsbHMxIjAgBgkqhkiG9w0BCQEWE3BlZXJjYWxsc0BwZWVyY2FsbHMwHhcNMTcx
|
||||
MDI5MTgwNDA1WhcNMzcxMDI0MTgwNDA1WjCBjzELMAkGA1UEBhMCVVMxCzAJBgNV
|
||||
BAgMAk5ZMREwDwYDVQQHDAhOZXcgWW9yazETMBEGA1UECgwKUGVlciBDYWxsczET
|
||||
MBEGA1UECwwKUGVlciBDYWxsczESMBAGA1UEAwwJcGVlcmNhbGxzMSIwIAYJKoZI
|
||||
hvcNAQkBFhNwZWVyY2FsbHNAcGVlcmNhbGxzMIICIjANBgkqhkiG9w0BAQEFAAOC
|
||||
Ag8AMIICCgKCAgEAwEyqaPh5/hpSKxyPNElyGTqoDQZYHx836SnOif+2Pwv7VACz
|
||||
vNYyxyFn0Cf0tG45hD3J9EPzfC1b9kX11mToEElIT9VOuAsxvtIwBPI4rkyqFqjr
|
||||
kvN9pd9pINdj+eh/tSB5A0TLEqG7OqLRLSc61+R61usgMfQUFxKgUQOxAONx1wAP
|
||||
92emyCKcKNVeMVW1nK8TJkkSAPSrMK0yVsoDSLvv6EfA3Tjet4KWDRoCiobIwrdt
|
||||
o4txZiNA9nwmXSAewDV2IOCjMXZYe5bvPpQNuJ8uCQ1IkKXBb1AXyfkCEk9psNgW
|
||||
tHEoGry/2cRxJVoblypCwHirOxBvMizQoZsKPjfEAENRKDUbVB+B8zHVsb6aUns7
|
||||
+WHnK3wIxPhae0tqmDJRpfHsTA3a8vWBjKDFZ12SKie1e97GErqeIoKRgp/Kp3hx
|
||||
JwkUTEuT8tuOYZyqldEKOVAW+ise3KNlI1UP1Jdf/zp/vWG6wlU3HiiA3mHbdOU/
|
||||
gZG0ncntp4ffKHYlfP2acnwB5xFZe4U8gKu5u8LLbmUvBNQRMA2AeZIdukqvqDR6
|
||||
TimH7zI0rBeLERC4DJjhIP70QCjWPbj2vPgEpdNYncR8UzBQ2DdpsGAcJlmbIoPU
|
||||
xKpYKRol1Fko2zWNx389ljLi6UG1SM6wUgrI9DrP+yRtoV4P8XWUr2UaSQsCAwEA
|
||||
AaNTMFEwHQYDVR0OBBYEFA1qm3IOUXJ0AmW+FuG0yF76F3s8MB8GA1UdIwQYMBaA
|
||||
FA1qm3IOUXJ0AmW+FuG0yF76F3s8MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN
|
||||
AQELBQADggIBAKdo2T6yveUwU6Hv2XPGt4aRoBaP02ktjo3A8zkwcx7qjYervNI5
|
||||
CHCOtYRp0y2PnYdCy57c1YQRqVTa6O+MHLzxJrAyM24pTV/uWHn44MGxXh7kSReW
|
||||
Lc4iHPsyvc+p0MP0qgYjHZOyhYtxPK6EQOWql7E/rmCsq9TcRjLBY4McMbdgQBMe
|
||||
Bpoos+zVI88598lU1oW/gGnwOMZCNRhQXk74WXRM9UAnB1ZzToHC8s0UzoFF4BIb
|
||||
r11VF/uVKdmuYgeNZHX76jElGmYMvAMvSq1EdziRQ4UHxvh+1gOFw5TvDo0N3wjk
|
||||
3MhiH0pmDnFvaf78ikM4tXObk5rYDxXiaCraSyyIJej0U1oL/3pIddFdUA6tkGsW
|
||||
hgY3jKIvmpEmAAzNsLQ0MYqbV7BJk4PYx14YhO/TnflsHTYvVfQWagNNmcoyj5gv
|
||||
lUjy+5w0piHp6wgqXyDdZT2/aRvj47iDmtHD0HLUATcEa+kyVWnXxrMxRdBp0V3S
|
||||
EZAkYQftyfQGv3/74PDLOry1NlEcWdiOVZcZfmOve1ad6RQfocmsjEjN3mGZe4Kq
|
||||
/8RrlauNaA9enEal4VXDYpNdgpzcIudEJt6sFBdF2N3FUItkZ6MNX0UBgUrMOLhZ
|
||||
WmAiLTw/3+ulCOMuS+m2Ih05sa8WpslG83rZIM7ScK4C/+zPDNS0HuO3
|
||||
-----END CERTIFICATE-----
|
||||
15
src/index.js
15
src/index.js
@ -7,5 +7,16 @@ if (!process.env.DEBUG) {
|
||||
const app = require('./server/app.js')
|
||||
const debug = require('debug')('peercalls')
|
||||
|
||||
let port = process.env.PORT || 3000
|
||||
app.listen(port, () => debug('Listening on: %s', port))
|
||||
const port = process.env.PORT || 3000
|
||||
const server = app.listen(port, () => debug('Listening on: %s', port))
|
||||
|
||||
function close () {
|
||||
debug('Closing server...')
|
||||
server.close(() => {
|
||||
debug('Bye!')
|
||||
process.exit()
|
||||
})
|
||||
}
|
||||
|
||||
process.on('SIGINT', close)
|
||||
process.on('SIGTERM', close)
|
||||
|
||||
29
src/server/__tests__/server-test.js
Normal file
29
src/server/__tests__/server-test.js
Normal file
@ -0,0 +1,29 @@
|
||||
const express = require('express')
|
||||
const http = require('http')
|
||||
const https = require('https')
|
||||
const { createServer } = require('../server.js')
|
||||
|
||||
describe('server', () => {
|
||||
|
||||
let app, config
|
||||
beforeEach(() => {
|
||||
config = {}
|
||||
app = express()
|
||||
})
|
||||
|
||||
describe('createServer', () => {
|
||||
it('creates https server when config.ssl', () => {
|
||||
config.ssl = {
|
||||
cert: 'config/cert.example.pem',
|
||||
key: 'config/cert.example.key'
|
||||
}
|
||||
const s = createServer(config, app)
|
||||
expect(s).toEqual(jasmine.any(https.Server))
|
||||
})
|
||||
it('creates http server when no ssl config', () => {
|
||||
const s = createServer(config, app)
|
||||
expect(s).toEqual(jasmine.any(http.Server))
|
||||
})
|
||||
})
|
||||
|
||||
})
|
||||
@ -5,6 +5,7 @@ const debug = require('debug')('peercalls')
|
||||
const express = require('express')
|
||||
const handleSocket = require('./socket.js')
|
||||
const path = require('path')
|
||||
const { createServer } = require('./server.js')
|
||||
|
||||
const BASE_URL = config.get('baseUrl')
|
||||
const SOCKET_URL = `${BASE_URL}/ws`
|
||||
@ -12,8 +13,8 @@ const SOCKET_URL = `${BASE_URL}/ws`
|
||||
debug(`WebSocket URL: ${SOCKET_URL}`)
|
||||
|
||||
const app = express()
|
||||
const http = require('http').Server(app)
|
||||
const io = require('socket.io')(http, { path: SOCKET_URL })
|
||||
const server = createServer(config, app)
|
||||
const io = require('socket.io')(server, { path: SOCKET_URL })
|
||||
|
||||
app.locals.version = require('../../package.json').version
|
||||
app.locals.baseUrl = BASE_URL
|
||||
@ -30,4 +31,4 @@ app.use(BASE_URL, router)
|
||||
|
||||
io.on('connection', socket => handleSocket(socket, io))
|
||||
|
||||
module.exports = http
|
||||
module.exports = server
|
||||
|
||||
17
src/server/server.js
Normal file
17
src/server/server.js
Normal file
@ -0,0 +1,17 @@
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
const projectRoot = path.resolve(path.join(__dirname, '../..'))
|
||||
|
||||
const readFile = file => fs.readFileSync(path.resolve(projectRoot, file))
|
||||
|
||||
function createServer (config, app) {
|
||||
if (config.ssl) {
|
||||
const key = readFile(config.ssl.key)
|
||||
const cert = readFile(config.ssl.cert)
|
||||
return require('https').createServer({ key, cert }, app)
|
||||
}
|
||||
return require('http').createServer(app)
|
||||
}
|
||||
|
||||
module.exports = { createServer }
|
||||
Loading…
x
Reference in New Issue
Block a user