UNPKG

sharex-uploader

Version:

95 lines (89 loc) 2.78 kB
require("dotenv").config(); const express = require("express"); const fileUpload = require("express-fileupload"); const fs = require("fs"); const cors = require("cors"); const bodyParser = require("body-parser"); const morgan = require("morgan"); const _ = require("lodash"); const e = require("express"); const app = express(); function randomString(length) { const keys = Array.from("abcdefghijklmnopqrstuvwxyz1234567890"); let key = ""; for (let i = 0; i < length; i++) { key += keys[Math.floor(Math.random() * keys.length)]; } return key; } exports.setup = function(data) { if (!data.constructor.name == "Object") return; const baseURL = data["url"] const secret = data["key"] const length = data["length"] const upp = data["upload_path"] const folder = data["folder"] const title = (!data["title"]) ? "" : data["title"] const des = (!data["description"]) ? "" : data["description"] app.use(fileUpload({createParentPath: true,})); app.use(cors()); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(morgan("dev")); app.post(upp, (req, res) => { try { if (req.headers.key !== secret) { return res.status(403).send({ status: 403, message: "Invalid token" }); } else { if (!req.files) { res.status(404).send({ status: 404, message: "No file uploaded", }); } else { let avatar = req.files.sharex; let name = randomString(length); let type = avatar.name.split(".")[1] avatar.mv(`./${folder}/` + name + "." + type); //send response res.send(`${baseURL}${name}`); } } } catch (err) { res.status(500).send(err); } }); app.get("/:path", (req, res) => { const path = req.params.path fs.readdir(__dirname + "/" + folder, function(err, files) { let data = {} for (let i = 0;i < files.length;i++) { data[files[i].split(".")[0]] = files[i] } if (fs.existsSync(`./${folder}/` + path)) { res.sendFile(__dirname + `/${folder}/` + path) } else if (!!data[path]) { res.send(`<!DOCTYPE html> <html> <head> <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'> <meta name='viewport' content='width=device-width'> <meta name='viewport' content='width=1024'> <meta charset='utf-8'> <meta property="og:title" content="${title}"> <meta property="og:image" content="${baseURL}${data[path]}"> <meta name="twitter:card" content="summary_large_image"> </head> <body> <script> window.location.replace("${baseURL}${data[path]}") </script> </body> </html>`) } }); }); if (!!data["port"]) { app.listen(data["port"]) } }