// Dependencies var express = require("express"), compression = require("compression"), path = require("path"), multer = require("multer"), uuid = require("node-uuid"), mkdirp = require("mkdirp"); // Routes and middleware var logger = require("../lib/logger/"), render = require("./render.js"), status = require("./status.js"), fonts = require("./fonts.js"), errorHandlers = require("./error.js"); // Settings var serverSettings = require("../lib/settings/"); var app = express(); app.use(compression()); app.use(logger.morgan()); // Options for where to store uploaded audio and max size var fileOptions = { storage: multer.diskStorage({ destination: function(req, file, cb) { var dir = path.join(serverSettings.workingDirectory, uuid.v1()); mkdirp(dir, function(err) { return cb(err, dir); }); }, filename: function(req, file, cb) { cb(null, "audio"); } }) }; if (serverSettings.maxUploadSize) { fileOptions.limits = { fileSize: +serverSettings.maxUploadSize }; } // On submission, check upload, validate input, and start generating a video app.post("/submit/", [multer(fileOptions).single("audio"), render.validate, render.route]); // If not using S3, serve videos locally if (!serverSettings.s3Bucket) { app.use("/video/", express.static(path.join(serverSettings.storagePath, "video"))); } // Serve custom fonts app.get("/fonts/fonts.css", fonts.css); if (serverSettings.fonts) { app.use("/fonts/:font", fonts.font); } // Check the status of a current video app.get("/status/:id/", status); // Serve background images and themes JSON statically app.use("/settings/", function(req, res, next) { // Limit to themes.json and bg images if (req.url.match(/^\/?themes.json$/i) || req.url.match(/^\/?backgrounds\/[^/]+$/i)) { return next(); } return res.status(404).send("Cannot GET " + path.join("/settings", req.url)); }, express.static(path.join(__dirname, "..", "settings"))); // Serve editor files statically app.use(express.static(path.join(__dirname, "..", "editor"))); app.use(errorHandlers); module.exports = app;