diff options
author | Minteck <contact@minteck.org> | 2022-11-28 17:14:38 +0100 |
---|---|---|
committer | Minteck <contact@minteck.org> | 2022-11-28 17:14:38 +0100 |
commit | 18efd30a263ec0d79a26a82cbd8c90c9f81056b7 (patch) | |
tree | aea01bf3506dda706719fc68eb37b77ed9ef3fe8 /build/core/API.js | |
download | autoreport-18efd30a263ec0d79a26a82cbd8c90c9f81056b7.tar.gz autoreport-18efd30a263ec0d79a26a82cbd8c90c9f81056b7.tar.bz2 autoreport-18efd30a263ec0d79a26a82cbd8c90c9f81056b7.zip |
Diffstat (limited to 'build/core/API.js')
-rw-r--r-- | build/core/API.js | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/build/core/API.js b/build/core/API.js new file mode 100644 index 0000000..ebe6346 --- /dev/null +++ b/build/core/API.js @@ -0,0 +1,198 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ReportEndpoint = void 0; +const AutoreportBase_1 = __importDefault(require("./AutoreportBase")); +const Authentication_1 = __importDefault(require("./Authentication")); +const Report_1 = require("../types/Report"); +const node_fs_1 = require("node:fs"); +const UUID_1 = __importDefault(require("../types/UUID")); +const Notification_1 = __importDefault(require("./Notification")); +class APIEndpoint extends AutoreportBase_1.default { +} +class ReportEndpoint extends APIEndpoint { + static refresh(req, res) { + ReportEndpoint.reports = JSON.parse((0, node_fs_1.readFileSync)("./data/reports.json").toString()); + return res.status(200).json({ + code: 200, + message: "OK." + }); + } + static post(req, res) { + if ([null, undefined, ""].includes(req.body.service) || + [null, undefined, ""].includes(req.body.time) || + [null, undefined, ""].includes(req.body.severity) || + [null, undefined, "", {}].includes(req.body.error) || + [null, undefined, "", {}].includes(req.body.systemInfo)) { + return res.status(400).json({ + code: 400, + message: "Report information is missing." + }); + } + if ([null, undefined, ""].includes(req.body.error.message) || + [null, undefined, ""].includes(req.body.error.stacktrace)) { + return res.status(400).json({ + code: 400, + message: "Error information is missing." + }); + } + if ([null, undefined, ""].includes(req.body.systemInfo.pid) || + [null, undefined, ""].includes(req.body.systemInfo.user) || + [null, undefined, ""].includes(req.body.systemInfo.executable) || + [null, undefined, ""].includes(req.body.systemInfo.memoryUsed) || + [null, undefined, ""].includes(req.body.systemInfo.cpuTimes) || + [null, undefined, ""].includes(req.body.systemInfo.uptime) || + [null, undefined, ""].includes(req.body.systemInfo.systemUptime) || + [null, undefined, ""].includes(req.body.systemInfo.os)) { + return res.status(400).json({ + code: 400, + message: "System information is missing." + }); + } + let severity = Report_1.ReportSeverity.Medium; + switch (req.body.severity.toString().toLowerCase()) { + case "low": + case "0": + severity = Report_1.ReportSeverity.Low; + break; + case "medium": + case "1": + severity = Report_1.ReportSeverity.Medium; + break; + case "high": + case "2": + severity = Report_1.ReportSeverity.High; + break; + case "critical": + case "3": + severity = Report_1.ReportSeverity.Critical; + break; + case "fatal": + case "4": + severity = Report_1.ReportSeverity.Fatal; + break; + default: + severity = Report_1.ReportSeverity.Medium; + break; + } + let reportError = { + message: req.body.error.message, + stacktrace: req.body.error.stacktrace, + logs: req.body.error.logs ?? null, + potentialFix: null + }; + let systemInfo = req.body.systemInfo; + let report = { + id: new UUID_1.default(), + service: req.body.service, + time: new Date(req.body.time), + severity, + response: Report_1.ReportResponse.None, + error: reportError, + systemInfo + }; + ReportEndpoint.reports.push(report); + (0, node_fs_1.writeFileSync)(AutoreportBase_1.default.getRoot() + "/data/reports.json", JSON.stringify(ReportEndpoint.reports)); + let notification = new Notification_1.default(report); + notification.send().then(() => { + res.status(201).json({ + code: 201, + message: "Created." + }); + }); + } + static get(req, res) { + if (!Authentication_1.default.checkAuthentication(req)) + return res.redirect("/oauth2/start"); + if ([null, undefined, ""].includes(req.query.id)) { + return res.status(400).json({ + code: 400, + message: "An ID must be provided." + }); + } + if (!ReportEndpoint.reports.some(report => report.id === req.query.id)) { + return res.status(404).json({ + code: 404, + message: "Report with that ID does not exist." + }); + } + res.status(200).json(ReportEndpoint.reports.find(report => report.id === req.query.id)); + } + static getMany(req, res) { + if (!Authentication_1.default.checkAuthentication(req)) + return res.redirect("/oauth2/start"); + let page = parseInt(req.query.page ?? 0); + let size = parseInt(req.query.size ?? 10); + if (isNaN(page)) { + return res.status(400).json({ + code: 400, + message: "Page must be a number." + }); + } + if (isNaN(size)) { + return res.status(400).json({ + code: 400, + message: "Size must be a number." + }); + } + // task: split the array into chunks of `size` + // good luck <3 + let reportsRequested = ReportEndpoint.reports.slice((size * page), size); + res.status(200).json({ + reports: reportsRequested, + page: page, + pageCount: Math.ceil(ReportEndpoint.reports.length / size) + }); + } + static patch(req, res) { + if (!Authentication_1.default.checkAuthentication(req)) + return res.redirect("/oauth2/start"); + if ([null, undefined, ""].includes(req.query.id) || + [null, undefined, ""].includes(req.query.response)) { + return res.status(400).json({ + code: 400, + message: "Report infomation is missing." + }); + } + if (!ReportEndpoint.reports.some(report => report.id === req.query.id)) { + return res.status(404).json({ + code: 404, + message: "That report does not exist." + }); + } + let reportIndex = ReportEndpoint.reports.findIndex(report => report.id === req.query.id); + let response; + switch (req.query.response.toString().toLowerCase()) { + case "none": + case "0": + response = Report_1.ReportResponse.None; + break; + case "acknowledged": + case "1": + response = Report_1.ReportResponse.Acknowledged; + break; + case "ignored": + case "2": + response = Report_1.ReportResponse.Ignored; + break; + case "stfu": + case "3": + response = Report_1.ReportResponse.STFU; + break; + default: + response = Report_1.ReportResponse.None; + break; + } + ReportEndpoint.reports[reportIndex].response = response; + (0, node_fs_1.writeFileSync)(AutoreportBase_1.default.getRoot() + "/data/reports.json", JSON.stringify(ReportEndpoint.reports)); + res.status(200).json({ + code: 200, + message: "Updated." + }); + } +} +exports.ReportEndpoint = ReportEndpoint; +ReportEndpoint.reports = JSON.parse((0, node_fs_1.readFileSync)("./data/reports.json").toString()); +//# sourceMappingURL=API.js.map
\ No newline at end of file |