From 96378c5db8da2d1e694fbe219595317ae3682f33 Mon Sep 17 00:00:00 2001 From: Mark Powers Date: Sat, 8 Aug 2020 08:44:21 -0500 Subject: Initial commit --- index.js | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 index.js (limited to 'index.js') diff --git a/index.js b/index.js new file mode 100644 index 0000000..4a52648 --- /dev/null +++ b/index.js @@ -0,0 +1,126 @@ +// TODO set rootPath and filters from web + +const exec = require('child_process').exec; +const express = require('express'); +const fs = require('fs') + +const maxFiles = 50; +const port = 8000 +const rootPath = "" +const type = "written" +const filters = { + "audio": ["flac", "ogg", "mp3", "aac", "midi", "mid", "opus", "wav"], + "written": ["txt", "pdf", "html", "epub", "doc", "docx"] +} + +const server = express(); + +server.use((req, res, next) => { + console.debug(new Date(), req.ip, req.method, req.originalUrl); + if(!["::1", "::ffff:127.0.0.1"].includes(req.ip )){ + res.status(404).send("you shall not pass") + return + } + next(); +}) + +server.get('/main.css', (req, res) => res.sendFile(__dirname + "/main.css")) + +function shuffle(a) { + for (let i = a.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [a[i], a[j]] = [a[j], a[i]]; + } + return a; +} + +var theFiles +server.get('/', async (req, res, next) => { + theFiles = [] + listFiles = function(path){ + files = fs.readdirSync(path) + files.forEach((file) => { + let stat = fs.statSync(`${path}/${file}`) + if(stat.isDirectory()){ + listFiles(`${path}/${file}`) + } else { + let idx = file.lastIndexOf(".") + if(idx == -1){ + return + } + let ext = file.substring(idx+1) + console.log(ext) + if(filters[type].includes(ext)){ + theFiles.push({ + path: path, + name: file, + created: String(stat.birthtime).substring(0, 24), + accessed: String(stat.atime).substring(0, 24), + }) + } + + } + }) + } + listFiles(rootPath) + shuffle(theFiles) + theFiles = theFiles.slice(0, maxFiles) + var html = [] + html.push(` + + + Files + + + + +

Check out these files!

+ + + `) + res.status(200).send(html.join("")) +}) + +server.get("/open/:index", (req, res, next)=>{ + let index = Number(req.params.index) + let f = theFiles[index] + exec(`xdg-open "${f.path}/${f.name}"`) + + res.status(200).send(""); +}) + +server.get("/openDir/:index", (req, res, next)=>{ + let index = Number(req.params.index) + let f = theFiles[index] + exec(`xdg-open "${f.path}"`) + + res.status(200).send(""); +}) + +server.listen(port, () => console.info(`Listening on port ${port}`)) -- cgit v1.2.3