diff --git a/bin.mjs b/bin.mjs index 0a1248b..6409b1f 100644 --- a/bin.mjs +++ b/bin.mjs @@ -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 diff --git a/cert.pem b/cert.pem new file mode 100644 index 0000000..0371e78 --- /dev/null +++ b/cert.pem @@ -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----- diff --git a/key.pem b/key.pem new file mode 100644 index 0000000..908be13 --- /dev/null +++ b/key.pem @@ -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----- diff --git a/lib/config.mjs b/lib/config.mjs index a056ae0..c8d11c3 100644 --- a/lib/config.mjs +++ b/lib/config.mjs @@ -40,6 +40,8 @@ nconf.defaults({ level: 'info', }, }, + sslkey: 'key.pem', + sslcert: 'cert.pem', development: { port: 3001, bunyan: { diff --git a/lib/spserver.mjs b/lib/spserver.mjs index 2549636..1ff670e 100644 --- a/lib/spserver.mjs +++ b/lib/spserver.mjs @@ -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 || '') + - ', static folder: ' + finalSettings.serve + - ', port: ' + finalSettings.port + logger.info('Started single-page server: ' + finalSettings.name + + ', base file: ' + (finalSettings.file || '') + + ', static folder: ' + finalSettings.serve + + ', port: ' + finalSettings.port + + (config.get('ssl') ? ' [SSL]' : '') ); this.server = server diff --git a/package.json b/package.json index c5d6361..df0a108 100644 --- a/package.json +++ b/package.json @@ -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",