aboutsummaryrefslogtreecommitdiff
path: root/src/server/RouteManager.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/RouteManager.ts')
-rw-r--r--src/server/RouteManager.ts36
1 files changed, 24 insertions, 12 deletions
diff --git a/src/server/RouteManager.ts b/src/server/RouteManager.ts
index d8265582e..c88f3bb51 100644
--- a/src/server/RouteManager.ts
+++ b/src/server/RouteManager.ts
@@ -79,6 +79,7 @@ export default class RouteManager {
}
}
+ static routes: string[] = [];
/**
*
* @param initializer
@@ -86,11 +87,18 @@ export default class RouteManager {
addSupervisedRoute = (initializer: RouteInitializer): void => {
const { method, subscription, secureHandler, publicHandler, errorHandler } = initializer;
+ typeof (initializer.subscription) === "string" && RouteManager.routes.push(initializer.subscription);
+ initializer.subscription instanceof RouteSubscriber && RouteManager.routes.push(initializer.subscription.root);
+ initializer.subscription instanceof Array && initializer.subscription.map(sub => {
+ typeof (sub) === "string" && RouteManager.routes.push(sub);
+ sub instanceof RouteSubscriber && RouteManager.routes.push(sub.root);
+ });
const isRelease = this._isRelease;
let redirected = "";
const supervised = async (req: Request, res: Response) => {
let { user } = req;
const { originalUrl: target } = req;
+ console.log("TARGET: " + target);
if (process.env.DB === "MEM" && !user) {
user = { id: "guest", email: "", userDocumentId: "guestDocId" };
}
@@ -126,26 +134,30 @@ export default class RouteManager {
const original = url.replace(start, "");
const theurl = original.match(/http[s]?:\/\/[^\/]*/)![0];
const newdirect = start + encodeURIComponent(theurl + target);
- if (newdirect !== redirected) {
- redirected = newdirect;
- console.log("redirect relative path: " + (theurl + target));
- res.redirect(redirected);
- }
+ console.log("REDIRECT: " + (theurl + target));
+ res.redirect(newdirect);
}
- else {
- if (target.startsWith("/doc/")) {
- !res.headersSent && setTimeout(() => {
+ else if (!res.headersSent) {
+ const which2 = RouteManager.routes.findIndex(r => (r !== "/" || r === target) && target.startsWith(r));
+ const which = Array.from(registered.keys()).findIndex(r => (r !== "/" || r === target) && target.startsWith(r));
+ console.log("WHICH = " + (which === -1 ? "" : Array.from(registered.keys())[which]));
+ if (which !== -1) {
+ setTimeout(() => {
+ console.log("handled:" + target);
if (!res.headersSent) {
- res.redirect("/login");
console.log(red(`Initiating fallback for ${target}. Please remove dangling promise from route handler`));
const warning = `request to ${target} fell through - this is a fallback response`;
res.send({ warning });
}
}, 1000);
- } else {
- const warning = `request to ${target} fell through - this is a fallback response`;
- res.send({ warning });
}
+ else {
+ console.log("unhandled:" + target);
+ res.end();
+ }
+ } else {
+ console.log("pre-sent:" + target);
+ res.end();
}
};
const subscribe = (subscriber: RouteSubscriber | string) => {