Handle HTTPS termination

pull/113/head
Alex Kern 6 years ago
parent b060aed0bb
commit 695a6bbb36

@ -17,9 +17,14 @@ The recommended way to deploy FilePizza is as a [Docker container](https://hub.d
$ docker run -p 8080:8080 -e PORT=8080 -it kern/filepizza:master $ docker run -p 8080:8080 -e PORT=8080 -it kern/filepizza:master
You can also use [zeit/now](https://zeit.co/now): WebRTC only works over HTTPS, so you'll either have to get a signed HTTPS key/certificate from a CA such as [Let's Encrypt](https://letsencrypt.org/getting-started/)) or generate your own [self-signed pair](https://devcenter.heroku.com/articles/ssl-certificate-self) and trust it. Then, to run FilePizza with HTTPS termination:
$ now --npm --public -e NODE_ENV=production $ docker run \
-p 8080:8080 -e PORT=8080 \
-e HTTPS_KEY=/config/server.key \
-e HTTPS_CERT=/config/server.crt \
-v mylocalpath:/config \
-it kern/filepizza:master
You can specify your own ICE STUN/TURN servers for better connectivity behind NATs by passing a JSON encoding of the array via env var `ICE_SERVERS`. Alternatively, if you'd like to use [Twilio's STUN/TURN service](https://www.twilio.com/stun-turn), you can specify your SID and token using the `TWILIO_SID` and `TWILIO_TOKEN` environment variables, respectively. You can specify your own ICE STUN/TURN servers for better connectivity behind NATs by passing a JSON encoding of the array via env var `ICE_SERVERS`. Alternatively, if you'd like to use [Twilio's STUN/TURN service](https://www.twilio.com/stun-turn), you can specify your SID and token using the `TWILIO_SID` and `TWILIO_TOKEN` environment variables, respectively.

@ -2,25 +2,14 @@ var db = require("./db");
var express = require("express"); var express = require("express");
var expressWinston = require("express-winston"); var expressWinston = require("express-winston");
var fs = require("fs"); var fs = require("fs");
var http = require("http");
var https = require("https");
var ice = require("./ice"); var ice = require("./ice");
var socketIO = require("socket.io"); var socketIO = require("socket.io");
var winston = require("winston"); var winston = require("winston");
var app = express(); var app = express();
var server = http.Server(app);
var port = var port =
process.env.PORT || (process.env.NODE_ENV === "production" ? 80 : 3000); process.env.PORT || (process.env.NODE_ENV === "production" ? 80 : 3000);
var io = socketIO(server);
io.set("transports", ["polling"]);
server.on("error", function(err) {
winston.error(err.message);
process.exit(1);
});
process.on("unhandledRejection", (reason, p) => { process.on("unhandledRejection", (reason, p) => {
p.catch(err => { p.catch(err => {
log.error("Exiting due to unhandled rejection!"); log.error("Exiting due to unhandled rejection!");
@ -35,52 +24,77 @@ process.on("uncaughtException", err => {
process.exit(1); process.exit(1);
}); });
server.listen(port, function(err) { function bootServer(server) {
var host = server.address().address; var io = socketIO(server);
var port = server.address().port; io.set("transports", ["polling"]);
winston.info("FilePizza listening on %s:%s", host, port);
});
if (!process.env.QUIET) { if (!process.env.QUIET) {
app.use( app.use(
expressWinston.logger({ expressWinston.logger({
winstonInstance: winston, winstonInstance: winston,
expressFormat: true expressFormat: true
}) })
); );
} }
app.get("/app.js", require("./middleware/javascript")); app.get("/app.js", require("./middleware/javascript"));
app.use(require("./middleware/static")); app.use(require("./middleware/static"));
app.use([ app.use([
require("./middleware/bootstrap"), require("./middleware/bootstrap"),
require("./middleware/error"), require("./middleware/error"),
require("./middleware/react") require("./middleware/react")
]); ]);
io.on("connection", function(socket) { io.on("connection", function(socket) {
var upload = null; var upload = null;
socket.on("upload", function(metadata, res) { socket.on("upload", function(metadata, res) {
if (upload) return; if (upload) return;
db.create(socket).then(u => { db.create(socket).then(u => {
upload = u; upload = u;
upload.fileName = metadata.fileName; upload.fileName = metadata.fileName;
upload.fileSize = metadata.fileSize; upload.fileSize = metadata.fileSize;
upload.fileType = metadata.fileType; upload.fileType = metadata.fileType;
upload.infoHash = metadata.infoHash; upload.infoHash = metadata.infoHash;
res({ token: upload.token, shortToken: upload.shortToken }); res({ token: upload.token, shortToken: upload.shortToken });
});
});
socket.on("rtcConfig", function(_, res) {
ice.getICEServers().then(function(iceServers) {
res({ iceServers: iceServers });
});
}); });
});
socket.on("rtcConfig", function(_, res) { socket.on("disconnect", function() {
ice.getICEServers().then(function(iceServers) { db.remove(upload);
res({ iceServers: iceServers });
}); });
}); });
socket.on("disconnect", function() { server.on("error", function(err) {
db.remove(upload); winston.error(err.message);
process.exit(1);
}); });
});
server.listen(port, function(err) {
var host = server.address().address;
var port = server.address().port;
winston.info("FilePizza listening on %s:%s", host, port);
});
}
if (process.env.HTTPS_KEY && process.env.HTTPS_CERT) {
// user-supplied HTTPS key/cert
var https = require("https");
var server = https.createServer({
key: fs.readFileSync(process.env.HTTPS_KEY),
cert: fs.readFileSync(process.env.HTTPS_CERT),
})
bootServer(server)
} else {
// no HTTPS
var http = require("http");
var server = http.Server(app)
bootServer(server)
}

Loading…
Cancel
Save