Adding support for enabling SSL/TLS
This commit is contained in:
parent
939b7221ab
commit
5e6358602e
10
README.md
10
README.md
|
@ -35,8 +35,14 @@ STDOUT. Check the README there for more details and usages.
|
||||||
|
|
||||||
## Settings
|
## Settings
|
||||||
|
|
||||||
* `host` - the host the server runs on (default localhost)
|
* `http` - whether or not to serve an unencrypted HTTP site (default true)
|
||||||
* `port` - the port the server runs on (default 7777)
|
* `http_host` - the host the HTTP server runs on (default localhost)
|
||||||
|
* `http_port` - the port the HTTP server runs on (default 7777)
|
||||||
|
* `https` - whether or not to serve an encrypted HTTPS site (default false)
|
||||||
|
* `https_host` - the host the HTTPS server runs on (default localhost)
|
||||||
|
* `https_port` - the port the HTTPS server runs on (default 7778)
|
||||||
|
* `https_cert" - the file location of the HTTPS certificate (default /opt/certs/fullchain.pem)
|
||||||
|
* `https_key" - the file location of the HTTPS private key (default /opt/certs/privkey.pem)
|
||||||
* `keyLength` - the length of the keys to user (default 10)
|
* `keyLength` - the length of the keys to user (default 10)
|
||||||
* `maxLength` - maximum length of a paste (default none)
|
* `maxLength` - maximum length of a paste (default none)
|
||||||
* `staticMaxAge` - max age for static assets (86400)
|
* `staticMaxAge` - max age for static assets (86400)
|
||||||
|
|
10
config.js
10
config.js
|
@ -1,7 +1,13 @@
|
||||||
{
|
{
|
||||||
|
"http": true,
|
||||||
|
"http_host": "0.0.0.0",
|
||||||
|
"http_port": 7777,
|
||||||
|
|
||||||
"host": "0.0.0.0",
|
"https": false,
|
||||||
"port": 7777,
|
"https_host": "0.0.0.0",
|
||||||
|
"https_port": 7778,
|
||||||
|
"https_cert": "/opt/certs/fullchain.pem",
|
||||||
|
"https_key": "/opt/certs/privkey.pem",
|
||||||
|
|
||||||
"keyLength": 10,
|
"keyLength": 10,
|
||||||
|
|
||||||
|
|
14
package.json
14
package.json
|
@ -14,16 +14,18 @@
|
||||||
},
|
},
|
||||||
"main": "haste",
|
"main": "haste",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"busboy": "0.2.4",
|
||||||
|
"connect": "3.4.1",
|
||||||
"connect-ratelimit": "0.0.7",
|
"connect-ratelimit": "0.0.7",
|
||||||
"connect-route": "0.1.5",
|
"connect-route": "0.1.5",
|
||||||
"connect": "3.4.1",
|
"express": "^4.15.0",
|
||||||
"st": "1.1.0",
|
"https": "^1.0.0",
|
||||||
"winston": "0.6.2",
|
"pg": "4.1.1",
|
||||||
"redis-url": "0.1.0",
|
|
||||||
"redis": "0.8.1",
|
"redis": "0.8.1",
|
||||||
|
"redis-url": "0.1.0",
|
||||||
|
"st": "1.1.0",
|
||||||
"uglify-js": "1.3.3",
|
"uglify-js": "1.3.3",
|
||||||
"busboy": "0.2.4",
|
"winston": "0.6.2"
|
||||||
"pg": "4.1.1"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"mocha": "*",
|
"mocha": "*",
|
||||||
|
|
55
server.js
55
server.js
|
@ -1,6 +1,8 @@
|
||||||
|
var express = require('express');
|
||||||
|
var https = require('https');
|
||||||
var http = require('http');
|
var http = require('http');
|
||||||
var url = require('url');
|
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
|
var url = require('url');
|
||||||
|
|
||||||
var winston = require('winston');
|
var winston = require('winston');
|
||||||
var connect = require('connect');
|
var connect = require('connect');
|
||||||
|
@ -10,10 +12,40 @@ var connect_rate_limit = require('connect-ratelimit');
|
||||||
|
|
||||||
var DocumentHandler = require('./lib/document_handler');
|
var DocumentHandler = require('./lib/document_handler');
|
||||||
|
|
||||||
// Load the configuration and set some defaults
|
// Load the HTTP configuration and set some defaults
|
||||||
var config = JSON.parse(fs.readFileSync('./config.js', 'utf8'));
|
var config = JSON.parse(fs.readFileSync('./config.js', 'utf8'));
|
||||||
config.port = process.env.PORT || config.port || 7777;
|
config.http = process.env.HTTP || config.http || false;
|
||||||
config.host = process.env.HOST || config.host || 'localhost';
|
config.http_port = process.env.HTTPS_PORT || config.http_port || 80;
|
||||||
|
config.http_host = process.env.HTTPS_HOST || config.http_host || 'localhost';
|
||||||
|
|
||||||
|
// Load the HTTPS configuration and set some defaults
|
||||||
|
config.https = process.env.HTTPS || config.https || false;
|
||||||
|
config.https_port = process.env.HTTPS_PORT || config.https_port || 443;
|
||||||
|
config.https_host = process.env.HTTPS_HOST || config.https_host || 'localhost';
|
||||||
|
config.https_key = process.env.HTTPS_KEY || config.https_key || '';
|
||||||
|
config.https_cert = process.env.HTTPS_CERT || config.https_cert || '';
|
||||||
|
|
||||||
|
var https_options = {};
|
||||||
|
if (config.https) {
|
||||||
|
https_options = {
|
||||||
|
key: fs.readFileSync(config.https_key),
|
||||||
|
cert: fs.readFileSync(config.https_cert)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify a service was enabled
|
||||||
|
if (!config.http && !config.https){
|
||||||
|
winston.error('Neither HTTP nor HTTPS enabled. Quitting.');
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// If both HTTP and HTTPS are enabled, verify different ports were used
|
||||||
|
if (config.http && config.https){
|
||||||
|
if (config.http_port === config.https_port){
|
||||||
|
winston.error('HTTP port must not be the same as HTTPS port. Quitting.');
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Set up the logger
|
// Set up the logger
|
||||||
if (config.logging) {
|
if (config.logging) {
|
||||||
|
@ -102,7 +134,7 @@ var documentHandler = new DocumentHandler({
|
||||||
keyGenerator: keyGenerator
|
keyGenerator: keyGenerator
|
||||||
});
|
});
|
||||||
|
|
||||||
var app = connect();
|
var app = express();
|
||||||
|
|
||||||
// Rate limit all requests
|
// Rate limit all requests
|
||||||
if (config.rateLimits) {
|
if (config.rateLimits) {
|
||||||
|
@ -154,6 +186,15 @@ app.use(connect_st({
|
||||||
index: 'index.html'
|
index: 'index.html'
|
||||||
}));
|
}));
|
||||||
|
|
||||||
http.createServer(app).listen(config.port, config.host);
|
|
||||||
|
|
||||||
winston.info('listening on ' + config.host + ':' + config.port);
|
if (config.http) {
|
||||||
|
http.createServer(app).listen(config.http_port, config.http_host);
|
||||||
|
winston.info('listening on http:\/\/' + config.http_host + ':' + config.http_port);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config.https) {
|
||||||
|
https.createServer(https_options, app).listen(config.https_port, config.https_host);
|
||||||
|
winston.info('listening on https:\/\/' + config.https_host + ':' + config.https_port);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue