You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
filepizza/lib/server.js

125 lines
2.8 KiB
JavaScript

var db = require("./db");
var express = require("express");
var expressWinston = require("express-winston");
var forceSSL = require("express-force-ssl");
var fs = require("fs");
var http = require("http");
var https = require("https");
var ice = require("./ice");
var path = require("path");
var socketIO = require("socket.io");
var winston = require("winston");
var app = express();
if (process.env.SECURE) {
var server = https.Server(
{
key: fs.readFileSync(process.env.SSL_KEY || "key.pem"),
cert: fs.readFileSync(process.env.SSL_CERT || "cert.pem")
},
app
);
var port = process.env.PORT || 443;
var insecurePort = process.env.INSECURE_PORT || 80;
http.Server(app).listen(80);
} else {
var server = http.Server(app);
var port =
process.env.PORT || (process.env.NODE_ENV === "production" ? 80 : 3000);
}
var io = socketIO(server);
io.set("transports", ["polling"]);
var logDir = path.resolve(__dirname, "../log");
winston.add(winston.transports.DailyRotateFile, {
filename: logDir + "/access.log",
level: "info"
});
winston.add(winston.transports.File, {
filename: logDir + "/error.log",
level: "error",
handleExceptions: true,
json: false
});
server.on("error", function(err) {
winston.error(err.message);
process.exit(1);
});
process.on("unhandledRejection", (reason, p) => {
p.catch(err => {
log.error("Exiting due to unhandled rejection!");
log.error(err);
process.exit(1);
});
});
process.on("uncaughtException", err => {
log.error("Exiting due to uncaught exception!");
log.error(err);
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.QUIET) {
app.use(
expressWinston.logger({
winstonInstance: winston,
expressFormat: true
})
);
}
if (process.env.FORCE_SSL) {
app.set("forceSSLOptions", {
trustXFPHeader: true
});
app.use(forceSSL);
}
app.get("/app.js", require("./middleware/javascript"));
app.use(require("./middleware/static"));
app.use([
require("./middleware/bootstrap"),
require("./middleware/error"),
require("./middleware/react")
]);
io.on("connection", function(socket) {
var upload = null;
socket.on("upload", function(metadata, res) {
if (upload) return;
db.create(socket).then(u => {
upload = u;
upload.fileName = metadata.fileName;
upload.fileSize = metadata.fileSize;
upload.fileType = metadata.fileType;
upload.infoHash = metadata.infoHash;
res(upload.token);
});
});
socket.on("rtcConfig", function(_, res) {
ice.getICEServers().then(function(iceServers) {
res({ iceServers: iceServers });
});
});
socket.on("disconnect", function() {
db.remove(upload);
});
});