summaryrefslogtreecommitdiff
path: root/src/core/Autoreport.ts
blob: 756c19f33e1475b2c11cffc3a581304d96eb34a1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import AutoreportBase from "./AutoreportBase";
import express from "express";
import Authentication from "./Authentication";
import {Report, ReportError, ReportResponse, ReportSeverity} from "../types/Report";
import {readFileSync} from "node:fs";
import UUID from "../types/UUID";
import * as API from "./API";

export default class Autoreport extends AutoreportBase {
    constructor() {
        const app = express();

        app.use(express.static(AutoreportBase.getRoot() + "/assets"));
        app.use(express.json());
        app.set('view engine', 'ejs');

        app.get("/", (req, res) => {
            if (!Authentication.checkAuthentication(req)) return res.redirect("/oauth2/start");

            let reports: Report[] = JSON.parse(readFileSync("./data/reports.json").toString())

            res.render("index", { reports });
        });

        app.get("/oauth2/start", (req, res) => {
            Authentication.startFlow(req, res);
        });

        app.get("/oauth2/callback", (req, res) => {
            Authentication.callback(req, res);
        });

        app.post("/api/reports/refresh", (req, res) => {
            API.ReportEndpoint.refresh(req, res);
        })

        // API methods (public)
        app.get("/api/report", (req, res) => {
            API.ReportEndpoint.get(req, res);
        });

        app.get("/api/reports", (req, res) => {
            API.ReportEndpoint.getMany(req, res);
        });

        // API methods (private, need privateauth.equestria.dev authentication)
        app.patch("/api/report", (req, res) => {
            API.ReportEndpoint.patch(req, res);
        });

        // API methods (private, need token authentication)
        app.post("/api/report", Authentication.protectedAPI, (req, res) => {
            API.ReportEndpoint.post(req, res);
        });

        app.get("/oauth2/test", (req, res) => {
            Authentication.testEndpoint(req, res);
        })

        app.listen(34512);

        // To setup port forwarding:
        // - Ctrl+Shift+K/Cmd+Shift+K
        // - "Forward port"
        // - "34512:34512"
        // - You can now access it from http://localhost:34512

        console.log("Listening!");
        console.log("  - Public URL:  http://localhost:34512");
        console.log("  - OAuth2 test: http://localhost:34512/oauth2/start");

        super();
    }
}