Initial commit
This commit is contained in:
@@ -0,0 +1,204 @@
|
||||
const logger = require("../utils/logger.util.js");
|
||||
const path = require("path");
|
||||
const fs = require("fs");
|
||||
const uuid = require("uuid");
|
||||
const app_conf = require("../config/app.conf.js");
|
||||
const map_conf = require("../config/map.conf.js");
|
||||
const messages = require("../config/messages.conf.js");
|
||||
|
||||
const map = require("../utils/map.util.js");
|
||||
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
|
||||
function errorPageRenderer(res, emoji, message) {
|
||||
res.render("error", {
|
||||
page_title: app_conf.name,
|
||||
css_path: path.join(app_conf.paths.css.web, "stylesheet.css"),
|
||||
js_path: path.join(app_conf.paths.js.web, "error.js"),
|
||||
error_emoji: emoji,
|
||||
error_message: message
|
||||
})
|
||||
}
|
||||
|
||||
router.delete("/remove", async (req, res) => {
|
||||
logger.info(`${req.method}: "${req.url}" => ${req.get("User-Agent")}`);
|
||||
|
||||
if (req.query["element"]) {
|
||||
try {
|
||||
fs.unlinkSync(`app/storage/${req.query["element"]}`);
|
||||
res.status(200).send();
|
||||
} catch (error) {
|
||||
res.status(500).send();
|
||||
logger.error(error.message);
|
||||
}
|
||||
} else {
|
||||
res.status(400).send();
|
||||
}
|
||||
});
|
||||
|
||||
router.post("/upload", async (req, res) => {
|
||||
logger.info(`${req.method}: "${req.url}" => ${req.get("User-Agent")}`);
|
||||
|
||||
if (!req.files || !req.files.file) {
|
||||
res.status(422).send();
|
||||
} else {
|
||||
const uploaded_file = req.files.file;
|
||||
|
||||
let map_name = path.parse(uploaded_file["name"])["name"];
|
||||
if (map.mapExists(uploaded_file["name"])) {
|
||||
map_name += `_${uuid.v4()}`;
|
||||
}
|
||||
|
||||
fs.copyFile(uploaded_file.tempFilePath, `app/storage/${map_name}.csv`, (error) => {
|
||||
if (error) {
|
||||
logger.error(error);
|
||||
res.status(500).send();
|
||||
} else {
|
||||
res.status(201).send();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
router.get("/download", async (req, res) => {
|
||||
logger.info(`${req.method}: "${req.url}" => ${req.get("User-Agent")}`);
|
||||
|
||||
if (req.query["element"]) {
|
||||
res.download(`app/storage/${req.query["element"]}`);
|
||||
} else {
|
||||
res.status(400).send();
|
||||
}
|
||||
});
|
||||
|
||||
router.post("/add", async (req, res) => {
|
||||
logger.info(`${req.method}: "${req.url}" => ${req.get("User-Agent")}`);
|
||||
|
||||
if (req.body) {
|
||||
await map.addMap(`map_${uuid.v4()}.csv`, req.body["meta"], req.body["throttle"], req.body["motor"]);
|
||||
|
||||
res.status(200).send();
|
||||
} else {
|
||||
res.status(400).send();
|
||||
}
|
||||
});
|
||||
|
||||
router.post("/edit", async (req, res) => {
|
||||
logger.info(`${req.method}: "${req.url}" => ${req.get("User-Agent")}`);
|
||||
|
||||
if (req.query["element"] && req.body) {
|
||||
try {
|
||||
await map.updateMap(req.query["element"], req.body["meta"], req.body["throttle"], req.body["motor"]);
|
||||
|
||||
res.status(200).send();
|
||||
} catch (error) {
|
||||
res.status(500).send();
|
||||
logger.error(error.message);
|
||||
}
|
||||
} else {
|
||||
res.status(400).send();
|
||||
}
|
||||
});
|
||||
|
||||
router.get("/add", async (req, res) => {
|
||||
logger.info(`${req.method}: "${req.url}" => ${req.get("User-Agent")}`);
|
||||
|
||||
res.render("add", {
|
||||
page_title: app_conf.name,
|
||||
program: app_conf.program,
|
||||
css_path: path.join(app_conf.paths.css.web, "stylesheet.css"),
|
||||
js_path: path.join(app_conf.paths.js.web, "add.js"),
|
||||
chartjs: app_conf.paths.chartjs.web + "/chart.umd.js",
|
||||
steps: map_conf.steps,
|
||||
max_rpm: map_conf.max_rpm,
|
||||
max_throttle: map_conf.max_throttle
|
||||
});
|
||||
});
|
||||
|
||||
router.get("/edit", async (req, res) => {
|
||||
logger.info(`${req.method}: "${req.url}" => ${req.get("User-Agent")}`);
|
||||
|
||||
const requested_map = req.query["element"];
|
||||
if (requested_map) {
|
||||
try {
|
||||
if (map.mapExists(requested_map)) {
|
||||
res.render("edit", {
|
||||
page_title: app_conf.name,
|
||||
program: app_conf.program,
|
||||
css_path: path.join(app_conf.paths.css.web, "stylesheet.css"),
|
||||
js_path: path.join(app_conf.paths.js.web, "edit.js"),
|
||||
chartjs: app_conf.paths.chartjs.web + "/chart.umd.js",
|
||||
map: JSON.stringify(await map.parseMapJson(requested_map, 0)),
|
||||
map_meta: JSON.stringify(await map.parseMapJson(requested_map, 1)),
|
||||
steps: map_conf.steps,
|
||||
max_rpm: map_conf.max_rpm,
|
||||
max_throttle: map_conf.max_throttle
|
||||
});
|
||||
} else {
|
||||
errorPageRenderer(res, "🔍❌", messages.not_found);
|
||||
}
|
||||
} catch (error) {
|
||||
errorPageRenderer(res, "🌋💥", messages.internal_server_error);
|
||||
logger.error(error.message);
|
||||
}
|
||||
} else {
|
||||
errorPageRenderer(res, "✋⛔", messages.bad_request);
|
||||
}
|
||||
});
|
||||
|
||||
router.get("/", async (req, res) => {
|
||||
logger.info(`${req.method}: "${req.url}" => ${req.get("User-Agent")}`);
|
||||
|
||||
try {
|
||||
const maps = await map.getAvailableMaps();
|
||||
|
||||
if (Object.keys(maps).length) {
|
||||
var table_data = "";
|
||||
for (m of Object.keys(maps)) {
|
||||
table_data += `<tr><td>${m}</td>`;
|
||||
if ("name" in maps[m]) {
|
||||
table_data += `<td>${maps[m]["name"]}</td>`;
|
||||
} else {
|
||||
table_data += "<td>-</td>";
|
||||
}
|
||||
|
||||
if ("id" in maps[m]) {
|
||||
table_data += `<td>${maps[m]["id"]}</td>`;
|
||||
} else {
|
||||
table_data += "<td>-</td>";
|
||||
}
|
||||
|
||||
if ("description" in maps[m]) {
|
||||
table_data += `<td>${maps[m]["description"]}</td>`;
|
||||
} else {
|
||||
table_data += "<td>-</td>";
|
||||
}
|
||||
|
||||
table_data += "</tr>";
|
||||
}
|
||||
|
||||
res.render("index", {
|
||||
page_title: app_conf.name,
|
||||
program: app_conf.program,
|
||||
css_path: path.join(app_conf.paths.css.web, "stylesheet.css"),
|
||||
js_path: path.join(app_conf.paths.js.web, "index.js"),
|
||||
table_data: table_data
|
||||
});
|
||||
} else {
|
||||
errorPageRenderer(res, "❓", messages.empty_db);
|
||||
}
|
||||
} catch (error) {
|
||||
errorPageRenderer(res, "🌋💥", messages.internal_server_error);
|
||||
logger.error(error.message);
|
||||
}
|
||||
});
|
||||
|
||||
router.get("/about", (req, res) => {
|
||||
res.render("about", {
|
||||
page_title: app_conf.name,
|
||||
css_path: path.join(app_conf.paths.css.web, "stylesheet.css"),
|
||||
version: app_conf.version
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user