feat: HTTPS support

This commit is contained in:
Nick 2019-01-30 01:30:05 -05:00
parent a113d1199d
commit 3ede499732
3 changed files with 68 additions and 11 deletions

View File

@ -10,13 +10,6 @@
port: 3000 port: 3000
# ---------------------------------------------------------------------
# IP address the server should listen to
# ---------------------------------------------------------------------
# Do not change unless you know what you are doing!
bindIP: 0.0.0.0
# --------------------------------------------------------------------- # ---------------------------------------------------------------------
# Database # Database
# --------------------------------------------------------------------- # ---------------------------------------------------------------------
@ -49,6 +42,40 @@ redis:
db: 0 db: 0
password: null password: null
#######################################################################
# ADVANCED OPTIONS #
#######################################################################
# Do not change unless you know what you are doing!
# ---------------------------------------------------------------------
# SSL/TLS Settings
# ---------------------------------------------------------------------
# Consider using a reverse proxy (e.g. nginx) if you require more
# advanced options than those provided below.
ssl:
enabled: false
# Certificate format, either 'pem' or 'pfx':
format: pem
# Using PEM format:
key: path/to/key.pem
cert: path/to/cert.pem
# Using PFX format:
pfx: path/to/cert.pfx
# Passphrase when using encrypted PEM / PFX keys (default: null):
passphrase: null
# Diffie Hellman parameters, with key length being greater or equal
# to 1024 bits (default: null):
dhparam: null
# ---------------------------------------------------------------------
# IP address the server should listen to
# ---------------------------------------------------------------------
# Leave 0.0.0.0 for all interfaces
bindIP: 0.0.0.0
# --------------------------------------------------------------------- # ---------------------------------------------------------------------
# Log Level # Log Level
# --------------------------------------------------------------------- # ---------------------------------------------------------------------

View File

@ -21,6 +21,8 @@ defaults:
port: 6379 port: 6379
db: 0 db: 0
password: null password: null
ssl:
enabled: false
# DB defaults # DB defaults
graphEndpoint: 'https://graph.requarks.io' graphEndpoint: 'https://graph.requarks.io'
lang: lang:

View File

@ -6,6 +6,7 @@ const cors = require('cors')
const express = require('express') const express = require('express')
const favicon = require('serve-favicon') const favicon = require('serve-favicon')
const http = require('http') const http = require('http')
const https = require('https')
const path = require('path') const path = require('path')
const { ApolloServer } = require('apollo-server-express') const { ApolloServer } = require('apollo-server-express')
// const oauth2orize = require('oauth2orize') // const oauth2orize = require('oauth2orize')
@ -166,10 +167,33 @@ module.exports = async () => {
let srvConnections = {} let srvConnections = {}
WIKI.logger.info(`HTTP Server on port: [ ${WIKI.config.port} ]`)
app.set('port', WIKI.config.port) app.set('port', WIKI.config.port)
if (WIKI.config.ssl.enabled) {
WIKI.logger.info(`HTTPS Server on port: [ ${WIKI.config.port} ]`)
const tlsOpts = {}
try {
if (WIKI.config.ssl.format === 'pem') {
tlsOpts.key = fs.readFileSync(WIKI.config.ssl.key)
tlsOpts.cert = fs.readFileSync(WIKI.config.ssl.cert)
} else {
tlsOpts.pfx = fs.readFileSync(WIKI.config.ssl.pfx)
}
if (!_.isEmpty(WIKI.config.ssl.passphrase)) {
tlsOpts.passphrase = WIKI.config.ssl.passphrase
}
if (!_.isEmpty(WIKI.config.ssl.dhparam)) {
tlsOpts.dhparam = WIKI.config.ssl.dhparam
}
} catch (err) {
WIKI.logger.error('Failed to setup HTTPS server parameters:')
WIKI.logger.error(err)
return process.exit(1)
}
WIKI.server = https.createServer(tlsOpts, app)
} else {
WIKI.logger.info(`HTTP Server on port: [ ${WIKI.config.port} ]`)
WIKI.server = http.createServer(app) WIKI.server = http.createServer(app)
}
apolloServer.installSubscriptionHandlers(WIKI.server) apolloServer.installSubscriptionHandlers(WIKI.server)
WIKI.server.listen(WIKI.config.port, WIKI.config.bindIP) WIKI.server.listen(WIKI.config.port, WIKI.config.bindIP)
@ -200,7 +224,11 @@ module.exports = async () => {
}) })
WIKI.server.on('listening', () => { WIKI.server.on('listening', () => {
if (WIKI.config.ssl.enabled) {
WIKI.logger.info('HTTPS Server: [ RUNNING ]')
} else {
WIKI.logger.info('HTTP Server: [ RUNNING ]') WIKI.logger.info('HTTP Server: [ RUNNING ]')
}
}) })
WIKI.server.destroy = (cb) => { WIKI.server.destroy = (cb) => {