summaryrefslogtreecommitdiff
path: root/build/core/API.js
diff options
context:
space:
mode:
Diffstat (limited to 'build/core/API.js')
-rw-r--r--build/core/API.js198
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