sharex-uploader
Version:
95 lines (89 loc) • 2.78 kB
JavaScript
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"])
}
}