mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-28 06:05:24 +00:00
48 lines
1.9 KiB
TypeScript
48 lines
1.9 KiB
TypeScript
// Mounted at /network-topology. Network Topology ships as a first-party
|
|
// in-process plugin (plugins/network-topology) rather than a route file
|
|
// imported directly here, so this module exists to keep /network-topology/*
|
|
// working at its original path without handing the plugin a reference to the
|
|
// shared app instance. The plugin runtime registers its router via
|
|
// registerNetworkTopologyRouter when it activates, and clears it on
|
|
// deactivate, so a disabled plugin falls back to the 404 below.
|
|
//
|
|
// Unlike /plugin-api, this dispatcher applies no auth of its own: it forwards
|
|
// to exactly one first-party router (the Network Topology plugin's own), and
|
|
// every route in that router already applies authenticateJWT itself, the same
|
|
// as every other router mounted alongside it here (/users, /host, /snippets,
|
|
// ...). /plugin-api gates at the mount point because it forwards to arbitrary
|
|
// third-party plugin code that cannot be assumed to gate itself; that
|
|
// reasoning does not apply to a single first-party router that already does.
|
|
|
|
import type { Request, Response, NextFunction, Router } from "express";
|
|
import { databaseLogger } from "../../utils/logger.js";
|
|
|
|
let activeRouter: Router | null = null;
|
|
|
|
export function registerNetworkTopologyRouter(router: Router): void {
|
|
activeRouter = router;
|
|
databaseLogger.info("Registered Network Topology plugin router", {
|
|
operation: "network_topology_dispatch_register",
|
|
});
|
|
}
|
|
|
|
export function unregisterNetworkTopologyRouter(): void {
|
|
if (!activeRouter) return;
|
|
activeRouter = null;
|
|
databaseLogger.info("Unregistered Network Topology plugin router", {
|
|
operation: "network_topology_dispatch_register",
|
|
});
|
|
}
|
|
|
|
export default function networkTopologyDispatch(
|
|
req: Request,
|
|
res: Response,
|
|
next: NextFunction,
|
|
): void {
|
|
if (!activeRouter) {
|
|
res.status(404).json({ error: "Network Topology is not available" });
|
|
return;
|
|
}
|
|
activeRouter(req, res, next);
|
|
}
|