workadventure/back/src/Controller/DebugController.ts

66 lines
2.8 KiB
TypeScript
Raw Normal View History

2021-06-24 10:09:10 +02:00
import { ADMIN_API_TOKEN } from "../Enum/EnvironmentVariable";
import { stringify } from "circular-json";
import { HttpRequest, HttpResponse } from "uWebSockets.js";
import { parse } from "query-string";
import { App } from "../Server/sifrr.server";
import { socketManager } from "../Services/SocketManager";
export class DebugController {
2021-06-24 10:09:10 +02:00
constructor(private App: App) {
this.getDump();
}
2021-06-24 10:09:10 +02:00
getDump() {
2021-12-03 18:29:36 +01:00
this.App.get("/dump", (res: HttpResponse, req: HttpRequest) => {
(async () => {
const query = parse(req.getQuery());
2020-09-29 10:57:14 +02:00
2021-12-03 18:29:36 +01:00
if (query.token !== ADMIN_API_TOKEN) {
return res.writeStatus("401 Unauthorized").end("Invalid token sent!");
}
2021-12-03 18:29:36 +01:00
return res
.writeStatus("200 OK")
.writeHeader("Content-Type", "application/json")
.end(
2021-12-06 18:34:09 +01:00
stringify(
await Promise.all(socketManager.getWorlds().values()),
(key: unknown, value: unknown) => {
if (key === "listeners") {
return "Listeners";
2021-12-03 18:29:36 +01:00
}
2021-12-06 18:34:09 +01:00
if (key === "socket") {
return "Socket";
}
if (key === "batchedMessages") {
return "BatchedMessages";
}
if (value instanceof Map) {
2021-12-23 15:27:17 +01:00
const obj: { [key: string | number]: unknown } = {};
2021-12-06 18:34:09 +01:00
for (const [mapKey, mapValue] of value.entries()) {
2021-12-23 15:27:17 +01:00
if (typeof mapKey === "number" || typeof mapKey === "string") {
obj[mapKey] = mapValue;
}
2021-12-06 18:34:09 +01:00
}
return obj;
} else if (value instanceof Set) {
const obj: Array<unknown> = [];
for (const [setKey, setValue] of value.entries()) {
obj.push(setValue);
}
return obj;
} else {
return value;
2021-12-03 18:29:36 +01:00
}
}
2021-12-06 18:34:09 +01:00
)
2021-12-03 18:29:36 +01:00
);
2021-12-06 18:34:09 +01:00
})().catch((e) => {
2021-12-03 18:29:36 +01:00
console.error(e);
res.writeStatus("500");
res.end("An error occurred");
});
});
}
}