workadventure/back/src/Controller/DebugController.ts

55 lines
2.1 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() {
2020-09-29 10:57:14 +02:00
this.App.get("/dump", (res: HttpResponse, req: HttpRequest) => {
const query = parse(req.getQuery());
if (query.token !== ADMIN_API_TOKEN) {
2021-06-24 10:09:10 +02:00
return res.status(401).send("Invalid token sent!");
}
2021-06-24 10:09:10 +02:00
return res
.writeStatus("200 OK")
.writeHeader("Content-Type", "application/json")
.end(
stringify(socketManager.getWorlds(), (key: unknown, value: unknown) => {
if (key === "listeners") {
return "Listeners";
}
if (key === "socket") {
return "Socket";
}
if (key === "batchedMessages") {
return "BatchedMessages";
}
2021-06-24 10:09:10 +02:00
if (value instanceof Map) {
const obj: any = {}; // eslint-disable-line @typescript-eslint/no-explicit-any
for (const [mapKey, mapValue] of value.entries()) {
obj[mapKey] = mapValue;
}
return obj;
} else if (value instanceof Set) {
2020-09-25 15:42:05 +02:00
const obj: Array<unknown> = [];
for (const [setKey, setValue] of value.entries()) {
obj.push(setValue);
}
return obj;
2021-06-24 10:09:10 +02:00
} else {
return value;
}
})
);
});
}
}