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-----
|
||||||
|
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
|
||||||
|
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-----
|
||||||
|
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
|
||||||
|
-----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 app = require('./server/app.js')
|
||||||
const debug = require('debug')('peercalls')
|
const debug = require('debug')('peercalls')
|
||||||
|
|
||||||
let port = process.env.PORT || 3000
|
const port = process.env.PORT || 3000
|
||||||
app.listen(port, () => debug('Listening on: %s', port))
|
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 express = require('express')
|
||||||
const handleSocket = require('./socket.js')
|
const handleSocket = require('./socket.js')
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
|
const { createServer } = require('./server.js')
|
||||||
|
|
||||||
const BASE_URL = config.get('baseUrl')
|
const BASE_URL = config.get('baseUrl')
|
||||||
const SOCKET_URL = `${BASE_URL}/ws`
|
const SOCKET_URL = `${BASE_URL}/ws`
|
||||||
@ -12,8 +13,8 @@ const SOCKET_URL = `${BASE_URL}/ws`
|
|||||||
debug(`WebSocket URL: ${SOCKET_URL}`)
|
debug(`WebSocket URL: ${SOCKET_URL}`)
|
||||||
|
|
||||||
const app = express()
|
const app = express()
|
||||||
const http = require('http').Server(app)
|
const server = createServer(config, app)
|
||||||
const io = require('socket.io')(http, { path: SOCKET_URL })
|
const io = require('socket.io')(server, { path: SOCKET_URL })
|
||||||
|
|
||||||
app.locals.version = require('../../package.json').version
|
app.locals.version = require('../../package.json').version
|
||||||
app.locals.baseUrl = BASE_URL
|
app.locals.baseUrl = BASE_URL
|
||||||
@ -30,4 +31,4 @@ app.use(BASE_URL, router)
|
|||||||
|
|
||||||
io.on('connection', socket => handleSocket(socket, io))
|
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