Initial code commit
Put all code for the Open Source Github release up.
This commit is contained in:
parent
ce5ecb06e3
commit
1b54c54b83
9 changed files with 255 additions and 0 deletions
6
.gitignore
vendored
6
.gitignore
vendored
|
@ -1,3 +1,9 @@
|
|||
config/config.json
|
||||
i/
|
||||
image-type.json
|
||||
.vscode/
|
||||
package-lock.json
|
||||
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
|
|
14
config/config.example.json
Normal file
14
config/config.example.json
Normal file
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"server": {
|
||||
"port":8080,
|
||||
"image_dir":"./i/",
|
||||
"export_uri":"This url is used to return to the user when an image is uploaded e.g http://localhost:8080/",
|
||||
"instance_type":"Github Open Release",
|
||||
"acceptedTypes":[
|
||||
".png",
|
||||
".jpg",
|
||||
".jpeg",
|
||||
".gif"
|
||||
]
|
||||
}
|
||||
}
|
33
files/index.html
Normal file
33
files/index.html
Normal file
|
@ -0,0 +1,33 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>EUS - Default Page</title>
|
||||
<style>
|
||||
footer {
|
||||
position: fixed;
|
||||
background-color: #1B1C1D;
|
||||
height: 30px;
|
||||
width: 100%;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
z-index: 200;
|
||||
text-align: right;
|
||||
}
|
||||
.footer-element {
|
||||
position: absolute;
|
||||
right: 12px;
|
||||
top: 5px;
|
||||
color: white;
|
||||
}
|
||||
.footer-element b {
|
||||
color:#008B8B;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<footer>
|
||||
<div class="footer-element">
|
||||
Running Revolution Version: <b>|replaceVersion|</b> | Instance: <b>|replaceInstance|</b>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
102
index.js
Normal file
102
index.js
Normal file
|
@ -0,0 +1,102 @@
|
|||
const express = require("express"), app = express(), config = require("./config/config.json"), emoji = require("./misc/emoji_list.json"), randomstring = require("randomstring"), fs = require("fs"), chalk = require("chalk"), busboy = require("connect-busboy"), dirname = __dirname+"/";
|
||||
internals = {
|
||||
version:"0.0.5 Open",
|
||||
types: {
|
||||
a:"INFO",
|
||||
b:"REQUEST",
|
||||
c:"WARN"
|
||||
}
|
||||
};
|
||||
let dE = new Date(), startTime = dE.getTime(), endTime, modules = [], img_json;
|
||||
|
||||
// Clear console before printing anything
|
||||
console.clear();
|
||||
|
||||
fs.readFile('./misc/ascii.txt', function(err, data) {
|
||||
if (err) throw err;
|
||||
fs.readdir(config.server.image_dir, (err, files) => {
|
||||
// Generate the banner
|
||||
let asciiOut = data.toString()
|
||||
.replace("|replaceVersion|", `${chalk.yellow("Version:")} ${chalk.cyan(internals.version)}`)
|
||||
.replace("|titlecard|", chalk.yellow("The web server made for EUS"))
|
||||
.replace("DEV", chalk.red("DEV")).replace("RELEASE", chalk.green("RELEASE"))
|
||||
.replace("|replaceType|", `${chalk.yellow("Type: ")}${chalk.cyan(config.server.instance_type)}`)
|
||||
.replace("|replaceStats|", `${chalk.yellow("Images: ")}${chalk.cyan(files.length)}`);
|
||||
// Print the banner
|
||||
console.log(asciiOut);
|
||||
// Get the modules from the ./modules folder
|
||||
fs.readdir("./modules", (err, files) => {
|
||||
if (err) throw err;
|
||||
for (var i = 0; i < files.length; i++) {
|
||||
/*
|
||||
For every file in the array, output that it was found
|
||||
in the console and attempt to load it using require.
|
||||
Oh, and check that it has .js in it's file name!
|
||||
*/
|
||||
if (files[i].includes(".js")) {
|
||||
modules[files[i].toString().replace(".js", "")] = require(`./modules/${files[i].toString()}`);
|
||||
console.log(`[Modules] Found module ${files[i].toString()}`);
|
||||
} else {
|
||||
console.log(`[Modules] Found file ${files[i]}. It is not a module.`)
|
||||
}
|
||||
}
|
||||
fs.access("./image-type.json", error => {
|
||||
if (error) {
|
||||
fs.writeFile('./image-type.json', '{\n\}', function(err) {
|
||||
if (err) throw err;
|
||||
modules.logger.log(internals.types.a, emoji.thumb_down, "Created image-type File!");
|
||||
});
|
||||
} else {
|
||||
image_json = require("./image-type.json");
|
||||
}
|
||||
});
|
||||
modules.logger.log(internals.types.a, emoji.wave, "Starting Revolution...");
|
||||
server();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// File name that is returned to the uploader
|
||||
let fileOutName;
|
||||
|
||||
function server() {
|
||||
app.use(busboy());
|
||||
app.route('/upload')
|
||||
.post(function (req, res, next) {
|
||||
dE = new Date(); startTime = dE.getTime();
|
||||
var fstream;
|
||||
var thefe;
|
||||
req.pipe(req.busboy);
|
||||
req.busboy.on('file', function (fieldname, file, filename) {
|
||||
image_json = require("./image-type.json");
|
||||
fileOutName = randomstring.generate(14);
|
||||
modules.logger.log(`${internals.types.b}: ${req.method}`, emoji.fast_up, `Upload of ${fileOutName} started.`);
|
||||
if (config.server.acceptedTypes.includes(`.${filename.split(".")[filename.split(".").length-1]}`)) {
|
||||
thefe = `.${filename.split(".")[filename.split(".").length-1]}`;
|
||||
} else {
|
||||
res.end("This file type isn't accepted currently.");
|
||||
return;
|
||||
}
|
||||
//Path where image will be uploaded
|
||||
fstream = fs.createWriteStream(__dirname + '/i/' + fileOutName + thefe);
|
||||
file.pipe(fstream);
|
||||
fstream.on('close', function () {
|
||||
dE = new Date();
|
||||
endTime = dE.getTime();
|
||||
image_json[fileOutName] = `.${filename.split(".")[filename.split(".").length-1]}`;
|
||||
fs.writeFile('./image-type.json', JSON.stringify(image_json), function(err) {
|
||||
if (err) throw err;
|
||||
modules.logger.log(`${internals.types.b}: ${req.method}`, emoji.heavy_check, ` Upload of ${fileOutName} finished. Took ${endTime - startTime}ms`);
|
||||
res.end(config.server.export_uri+""+fileOutName);
|
||||
});
|
||||
});
|
||||
});
|
||||
})
|
||||
.get(function (req, res, next) {
|
||||
res.status(405).send("405! You requested the \"/upload\" endpoint with method \"GET\" but it was expecting POST<hr>Revolution - A web server designed for EUS")
|
||||
});
|
||||
app.get('*', (req, res) => { modules.request_handler.handle(modules.logger, image_json, internals, emoji, config, fs, chalk, req, res, dirname); });
|
||||
app.listen(config.server.port, () => { dE = new Date(), endTime = dE.getTime();
|
||||
modules.logger.log(internals.types.a, emoji.thumb_up, `Started Revolution on port ${config.server.port}! Took ${endTime - startTime}ms`);
|
||||
});
|
||||
}
|
6
misc/ascii.txt
Normal file
6
misc/ascii.txt
Normal file
|
@ -0,0 +1,6 @@
|
|||
____ __ __ _
|
||||
/ __ \___ _ ______ / /_ __/ /_(_)___ ____ |titlecard|
|
||||
/ /_/ / _ \ | / / __ \/ / / / / __/ / __ \/ __ \ |replaceVersion|
|
||||
/ _, _/ __/ |/ / /_/ / / /_/ / /_/ / /_/ / / / / |replaceStats|
|
||||
/_/ |_|\___/|___/\____/_/\__,_/\__/_/\____/_/ /_/ |replaceType|
|
||||
--------------------------------------------------------------------------------
|
10
misc/emoji_list.json
Normal file
10
misc/emoji_list.json
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"wave":"👋",
|
||||
"thumb_up":"👍",
|
||||
"page":"📄",
|
||||
"dizzy":"😵",
|
||||
"heavy_check":"✔️",
|
||||
"folder":"📁",
|
||||
"fast_up":"⏫",
|
||||
"cross":"❌"
|
||||
}
|
19
modules/logger.js
Normal file
19
modules/logger.js
Normal file
|
@ -0,0 +1,19 @@
|
|||
"use strict";
|
||||
const fs = require("fs");
|
||||
const chalk = require("chalk");
|
||||
let d = new Date();
|
||||
|
||||
module.exports = {
|
||||
log: function(type, emoji, text) {
|
||||
d = new Date();
|
||||
console.log(`${chalk.green(`[${timeNumbers(d.getHours())}:${timeNumbers(d.getMinutes())}:${timeNumbers(d.getSeconds())} - ${type}]`)} ${emoji} ${text}`)
|
||||
}
|
||||
}
|
||||
|
||||
function timeNumbers(inp) {
|
||||
if (inp <= 9) {
|
||||
return "0"+inp;
|
||||
} else {
|
||||
return inp;
|
||||
}
|
||||
}
|
50
modules/request_handler.js
Normal file
50
modules/request_handler.js
Normal file
|
@ -0,0 +1,50 @@
|
|||
"use strict";
|
||||
let d = new Date(),
|
||||
startTime,
|
||||
endTime,
|
||||
filesC;
|
||||
|
||||
module.exports = {
|
||||
handle: function(logger, image_json, internals, emoji, config, fs, chalk, req, res, dirname) {
|
||||
d = new Date();
|
||||
startTime = d.getTime();
|
||||
res.set('Server-Type', 'Revolution EUS');
|
||||
if (req.url == "/" || req.url == "/index.html") {
|
||||
fs.readFile('./files/index.html', function(err, data) {
|
||||
if (err) throw err;
|
||||
fs.readdir(dirname+"i/", (err, files) => {
|
||||
if (err) throw err;
|
||||
filesC = data.toString().replace("|replaceVersion|", internals.version).replace("|replaceInstance|", config.server.instance_type);
|
||||
res.send(filesC);
|
||||
d = new Date();
|
||||
endTime = d.getTime();
|
||||
logger.log(`${internals.types.b}: ${req.method}`, emoji.page, `${req.ip} | ${chalk.green("[200]")} ${req.url} ${endTime - startTime}ms`)
|
||||
});
|
||||
});
|
||||
} else {
|
||||
let urs = ""+req.url; urs = urs.split("/")[1];
|
||||
fs.access(config.server.image_dir+urs+image_json[urs], error => {
|
||||
if (error) {
|
||||
fs.access("./files"+req.url, error => {
|
||||
if (error) {
|
||||
res.status(404).end("404!");
|
||||
d = new Date();
|
||||
endTime = d.getTime();
|
||||
logger.log(`${internals.types.b}: ${req.method}`, emoji.cross, `${req.ip} | ${chalk.red("[404]")} ${req.url} ${endTime - startTime}ms`);
|
||||
} else {
|
||||
res.sendFile(dirname+"files"+req.url);
|
||||
d = new Date();
|
||||
endTime = d.getTime();
|
||||
logger.log(`${internals.types.b}: ${req.method}`, emoji.heavy_check, `${req.ip} | ${chalk.green("[200]")} ${req.url} ${endTime - startTime}ms`);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
res.sendFile(dirname+"i/"+urs+image_json[urs]);
|
||||
d = new Date();
|
||||
endTime = d.getTime();
|
||||
logger.log(`${internals.types.b}: ${req.method}`, emoji.heavy_check, `${req.ip} | ${chalk.green("[200]")} ${req.url} ${endTime - startTime}ms`);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
15
package.json
Normal file
15
package.json
Normal file
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"name": "neweus",
|
||||
"version": "0.0.5",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"chalk": "^2.4.2",
|
||||
"connect-busboy": "0.0.2",
|
||||
"express": "^4.17.1",
|
||||
"http": "0.0.0",
|
||||
"randomstring": "^1.1.5"
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue