Add support for running in ssl mode

Also added helpful argument to print current config and exit
This commit is contained in:
Jonatan Nilsson 2021-10-14 09:57:08 +00:00
parent f8b0dbc943
commit 33af1798b3
6 changed files with 77 additions and 8 deletions

10
bin.mjs
View file

@ -12,6 +12,11 @@ if (!config.get('file') && !config.get(env + ':file') &&
displayHelp = true;
}
if (config.get('config')) {
console.log(config.get())
process.exit(0)
}
if (displayHelp) {
console.log(`Run static server for static files, simple servers or pure MVVM projects.
Specifying either file or folder serving is required.
@ -37,6 +42,11 @@ Options:
--ip IP server runs on [default: 0.0.0.0]
--rooturlpath Root URL path server is deployed on; will be removed from
URL when resolving to files [default: /]
--ssl Specify whether to serve in ssl mode. Uses the path of
--sslkey and --sslcert.
--sslkey The path to the ssl key for ssl mode [default: key.pem]
--sslcert The path to the ssl certificate for ssl mode [default:
cert.pem]
Examples:
spserver -p 2000 -f base.html -s ./dist

19
cert.pem Normal file
View file

@ -0,0 +1,19 @@
-----BEGIN CERTIFICATE-----
MIIDFzCCAf8CFAVgLggEDpAeBShzYOqTu8/OA+LHMA0GCSqGSIb3DQEBCwUAMEgx
CzAJBgNVBAYTAlVTMRMwEQYDVQQIDApTb21lLVN0YXRlMREwDwYDVQQKDAhzcHNl
cnZlcjERMA8GA1UEAwwIc3BzZXJ2ZXIwHhcNMjExMDE0MDk0MDA2WhcNNDkwMjI4
MDk0MDA2WjBIMQswCQYDVQQGEwJVUzETMBEGA1UECAwKU29tZS1TdGF0ZTERMA8G
A1UECgwIc3BzZXJ2ZXIxETAPBgNVBAMMCHNwc2VydmVyMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEAq7r5IgsLAEBg4cxJSHkKk+FXTyXHWwt3XBKheGOo
+lcIczjHZs3LCLl+khh1yn6m0PkP0SOYU86xhUQ15k7W6lJEoIiG+Mea8xAyLbrr
iyd86z01JLm97OW6oEzCFqQENYAyC0ipzB8UWGMSISA9ilskCe/GucSe/T6VLxtP
A2y+Yv/WRyS3UtV4vcuYrdI9tZT31fBVKmBEG6YDCFuGs99f14S/iJGX1jelMvJ9
/hqdR2VuLbEgJPPCeCoKnmeAB+15vwuYoAOYWxz2KzPb/+bAQ6v+rm1oc6VPTWiL
hiOA8LcCg6GIWxWAZ/mnusOl/8elKNOz/nDj+dkolTCFlQIDAQABMA0GCSqGSIb3
DQEBCwUAA4IBAQAxujrHMjXloHtv5kRpX/k/8a/2JkvScaw7s9qNh0KBIUaAQuPD
y0tqnoPOwRqFI6vS1VLU32gqxHDJecpk+amgO7/++TC5zN6b1HDAVl6cA1Gn7ERR
AvkIoiRuvQTPG80w2jA5Pnv/Uj1ERqjqwtZ7J+6EnWTinDByvbgzUdnGTdICFSZI
gA1/1mka/vErcNoRAYOR9OrotQ0LFs6pyQ7oSB1Rt8WcZlibYRY7gLTslLmI+huR
BddQD7lVE7F8XzY08joLNBP2++haUorB1zJAKlmCib5d0pmPHL1mnvqNxhZ8O0cy
WaJ5UxNkzqzXdzu5r/fwCj2T9qLq0Ng1Jho4
-----END CERTIFICATE-----

27
key.pem Normal file
View file

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAq7r5IgsLAEBg4cxJSHkKk+FXTyXHWwt3XBKheGOo+lcIczjH
Zs3LCLl+khh1yn6m0PkP0SOYU86xhUQ15k7W6lJEoIiG+Mea8xAyLbrriyd86z01
JLm97OW6oEzCFqQENYAyC0ipzB8UWGMSISA9ilskCe/GucSe/T6VLxtPA2y+Yv/W
RyS3UtV4vcuYrdI9tZT31fBVKmBEG6YDCFuGs99f14S/iJGX1jelMvJ9/hqdR2Vu
LbEgJPPCeCoKnmeAB+15vwuYoAOYWxz2KzPb/+bAQ6v+rm1oc6VPTWiLhiOA8LcC
g6GIWxWAZ/mnusOl/8elKNOz/nDj+dkolTCFlQIDAQABAoIBAFDZ44dymYhRxwsn
yezUB/XdpuR9jeFAgb6YiusKSLksFq9gsQimpQuDgaK432QpwtIqIJc/Ye07J/rt
RU8cGTUS7HqELL+eAkajfmxnT5QhUD/Uflu/EzsgYYAtA0fzioPByk3jtQWEMGj4
o8Vyz2Z/SHVhLTey6YOjXktiWQ3r9ABD6IiJYP1txz+XwmAuS/t3+HpBjT5MxZC6
dImSBEmqGI5p40ZXW0j5ybvbQqDQ/1f1HGvIcH5gKE2EHYaJ1HvQYIgw+DGNMEmX
KYVp0SUlY6rMB1fE/BYmAwwV9pcYzsDwArLA9Ilb26CpFhqZrgxOfvakgbQiM5KI
YGlXj9UCgYEA3B/4ZTHcIHOjPTvauUBUah2JTxO6+SWq6UjtvU0vpJsdErI2pCBN
Ymg/TEDPp6mf1doxnYG43HF0s1Y8Cc9RzWPu9KC2Z/q4jqoxAb2TerAMmyiwaXYD
Zt1rY37AvQVWyz0ka2xguSSr/hZwhIW3vnPVkpiBeIs6NVbtDiH7hiMCgYEAx7fk
KkQBBCKNWfQ68o+PqdiUOeb4vQSzMt6Zy7eVI3Qt1dUctcbpc8teDYv8K3ask1S0
za+OIOn1u2DZhrCsfChyV2ojG15AiyyGV5IyQEhKC+GhBXhuFuZ/Z+LbuQ4iMZWM
Vl5vVfv9l3zhhIx48eSZ+V1w3qTrw4v3Gv3dVOcCgYEAizcM+bMW7M81pjx8kDzH
JnWXqZNo5LmV5gRhlx+ByjDvqitbs2Faj6ouniM/MWJt2+orBtpL998pV2JqhinA
Ko3RSpV5xzkiD9hDNj6XTziYQGjzaT9h12ShzkMT0nfV9KOurOHWKkGvJPs8HhQT
qTfJEvWwrHQhVCqtsgp78NECgYA6WtvbEaWuXJ4qk3cJ2rKicPrWdEtnh1EI4wvS
/2AfTNn7qdpKrsUVpW1kzesvk+xW3CA8HTiNG29GgcTtWv/7AyJtskBxxbdcMvVJ
7xipubWRBSs0Wvznyg+d/iYvSxbooAayUcN8PzXYpo+KWDUakK4As7HADDYrG+Fm
zJh4LwKBgQCEZVroxl14cVBEAtY7rWP1OaLvvDXJNhWMtdX1BawHXAFOigQJB2N4
0HA6dOJ0SBmPF8WlJUYM2aRy050T+Qiu9fIl1vlNKW0zOBj+lPQo7T4JTu/WPpbr
ZKVf12+b/RbV1ch3mb4KxkX80ASIfVaMRGQHAAgDpCM8fMVmm4NjdQ==
-----END RSA PRIVATE KEY-----

View file

@ -40,6 +40,8 @@ nconf.defaults({
level: 'info',
},
},
sslkey: 'key.pem',
sslcert: 'cert.pem',
development: {
port: 3001,
bunyan: {

View file

@ -1,5 +1,6 @@
import fs from 'fs'
import http from 'http'
import https from 'https'
import path from 'path'
import url from 'url'
import _ from 'lodash'
@ -71,7 +72,7 @@ class SPServer {
var base = SPServer.generateBase(finalSettings.file ? path.resolve(finalSettings.file) : null, finalSettings);
var server = http.createServer(function (req, res) {
let requestHandler = function (req, res) {
var startTime = new Date().getTime();
var isFinished = false
@ -106,15 +107,25 @@ class SPServer {
}
});
}).resume();
});
}
var server
if (config.get('ssl')) {
server = https.createServer({
key: fs.readFileSync(config.get('sslkey')),
cert: fs.readFileSync(config.get('sslcert'))
}, requestHandler)
} else {
server = http.createServer(requestHandler)
}
server.listen(finalSettings.port, finalSettings.ip);
logger.info(
'Started single-page server: ' + finalSettings.name +
', base file: ' + (finalSettings.file || '<none>') +
', static folder: ' + finalSettings.serve +
', port: ' + finalSettings.port
logger.info('Started single-page server: ' + finalSettings.name
+ ', base file: ' + (finalSettings.file || '<none>')
+ ', static folder: ' + finalSettings.serve
+ ', port: ' + finalSettings.port
+ (config.get('ssl') ? ' [SSL]' : '')
);
this.server = server

View file

@ -24,7 +24,7 @@
"dependencies": {
"bunyan-lite": "^1.1.1",
"lodash": "^4.17.2",
"nconf-lite": "^2.0.0",
"nconf-lite": "^2.1.0",
"node-static": "^0.7.6"
},
"bin": "./bin.mjs",