port = 8000; var log = require('loglevel'); log.setLevel(log.levels.INFO); // Require the libraries: var SocketIOFileUpload = require('socketio-file-upload'), socketio = require('socket.io'), express = require('express'); const app = express() .use(SocketIOFileUpload.router) .use(express.static(__dirname + "/public")); const http = require('http'); const server = http.createServer(app); const { Server } = require("socket.io"); const { SqliteHandler } = require('./handlers/sqliteHandler'); const { UploadObject } = require('./handlers/uploadHandler'); // Prepare directories var fs = require('fs'); var path = require('path'); tmp = __dirname + "/tmp/"; uploadsdir = __dirname + "/uploads/"; if (!fs.existsSync(tmp)){ fs.mkdirSync(tmp); } else { for (const file of fs.readdirSync(tmp)) { fs.unlinkSync(path.join(tmp, file)); } } if (!fs.existsSync(uploadsdir)){ fs.mkdirSync(uploadsdir); } const io = new Server(server); sqliteobj = new SqliteHandler("database.sqlite"); db = sqliteobj.getDatabaseObj(); // Make your Express server: app.get('/', (req, res) => { res.sendFile(__dirname + "/forms/select.html"); }) app.get('/api', (req, res) => { res.status(200).json({status:"ok", code:200}) }) app.get('/api/download/:hash', (req, res) => { if(handler == undefined) { var handler = new UploadObject(db); } if(handler.load(req.params.hash)){ res.status(200).json({result: { files: handler.getFiles() }, code:200}) } }) app.get('/download/:hash/index/:index', (req, res) => { if(handler == undefined) { var handler = new UploadObject(db); } if(handler.load(req.params.hash) && typeof parseInt(req.params.index) == 'number') { res.set("Content-Disposition", "attachment; filename=\""+handler.getFiles()[req.params.index].filename+"\"") res.sendFile(__dirname + "/uploads/" + handler.getHash()+"/"+handler.getFiles()[req.params.index].filename); } else { notFound(req, res); } }) app.get('/upload', (req, res) => { res.sendFile(__dirname + "/forms/upload.html"); }) app.get('/download', (req, res) => { res.sendFile(__dirname + "/forms/download.html"); }) app.get('/download/:hash', (req, res) => { res.sendFile(__dirname + "/forms/download.html"); }) app.get('/download/:hash/:adminhash', (req, res) => { res.sendFile(__dirname + "/forms/download.html"); }) // app.get('/download/:hash', (req, res) => { // if(handler == undefined) { // var handler = new UploadObject(db); // } // console.log(handler) // handler.load(req.params.hash) // if(handler.isLoaded()) { // res.send("Found"); // } else { // notFound(); // } // }) // app.get('/download/:hash/:adminhash', (req, res) => { // handler.load(req.params.hash, req.params.adminhash) // res.send("sdadsd"); // }) // Start up Socket.IO: // var io = new socketio.Server(app.listen(port)); io.sockets.on("connection", function(socket){ var handler = new UploadObject(db); if(socket.handshake.url.startsWith("/socket.io")) { var uploader = new SocketIOFileUpload(); uploader.dir = "tmp"; uploader.listen(socket); var processed = 0; socket.on("prepareUpload", function(num_files){ console.log("Got \"prepareUpload\" event"); console.log(num_files," Files") if(handler.new(num_files)){ console.log("Emitting \"serverReady\" event"); socket.emit("serverReady"); } } ) uploader.uploadValidator = function(event, callback){ // asynchronous operations allowed here; when done, if (handler.isLoaded()) { callback(true); } else { callback(false); } }; uploader.on("start", function(event){ // console.log(handler); }); // Do something when a file is saved: uploader.on("saved", function(event){ if (handler.isLoaded()) { processed++; if (event.file.success) { fs.renameSync(event.file.pathName, "uploads/"+handler.getDir()+"/"+event.file.name) handler.registerFile(event.file.name); } else { fs.unlinkSync(event.file.pathName); } console.log("Process Counter Updated", processed); console.log(handler.getNumFiles()); if (handler.getNumFiles() == processed && handler.getNumFiles() > 0) { socket.emit("linkCreated", handler.getHash(), handler.getAdminHash()); } } }); uploader.on("complete", function(event){ }); // Error handler: uploader.on("error", function(event){ console.log("Error from uploader", event); }); } }); function notFound(req, res) { res.status(404); ans = { error: 'Not found', code: 404 } if (req.query.format == "xml"){ res.set('Content-Type', 'text/xml'); res.send(xml({xml: ans})); } else if (req.query.format == "csv") { res.send(ans.error); } else if (req.query.format == "json") { res.json(ans); } // respond with html page if (req.accepts('html') && !req.url.startsWith("/api")) { res.send('