diff options
author | Bob Zeleznik <zzzman@gmail.com> | 2020-03-16 19:42:20 -0400 |
---|---|---|
committer | Bob Zeleznik <zzzman@gmail.com> | 2020-03-16 19:42:20 -0400 |
commit | 1230b4a3307725c5e0eb4daae991b2db5f4d1c96 (patch) | |
tree | 9557a855caefded379dcd507a4b96f3327ac27b0 /src/server/RouteManager.ts | |
parent | 6886bf8c0549f09e9d911ab105fcf4b2d2f051de (diff) |
fixed pdf uploading. changed routes to allow web pages to be loaded with relative urls. added a 'text' field to web documents with the page text contents.
Diffstat (limited to 'src/server/RouteManager.ts')
-rw-r--r-- | src/server/RouteManager.ts | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/src/server/RouteManager.ts b/src/server/RouteManager.ts index 63e957cd1..d8265582e 100644 --- a/src/server/RouteManager.ts +++ b/src/server/RouteManager.ts @@ -2,6 +2,7 @@ import RouteSubscriber from "./RouteSubscriber"; import { DashUserModel } from "./authentication/models/user_model"; import { Request, Response, Express } from 'express'; import { cyan, red, green } from 'colors'; +import { Utils } from "../client/northstar/utils/Utils"; export enum Method { GET, @@ -86,6 +87,7 @@ export default class RouteManager { const { method, subscription, secureHandler, publicHandler, errorHandler } = initializer; const isRelease = this._isRelease; + let redirected = ""; const supervised = async (req: Request, res: Response) => { let { user } = req; const { originalUrl: target } = req; @@ -118,13 +120,33 @@ export default class RouteManager { res.redirect("/login"); } } - setTimeout(() => { - if (!res.headersSent) { - console.log(red(`Initiating fallback for ${target}. Please remove dangling promise from route handler`)); + if (!res.headersSent && req.headers.referer?.includes("corsProxy")) { + const url = decodeURIComponent(req.headers.referer!); + const start = url.match(/.*corsProxy\//)![0]; + 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); + } + } + else { + if (target.startsWith("/doc/")) { + !res.headersSent && setTimeout(() => { + 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 }); } - }, 1000); + } }; const subscribe = (subscriber: RouteSubscriber | string) => { let route: string; @@ -133,7 +155,7 @@ export default class RouteManager { } else { route = subscriber.build; } - if (!/^\/$|^\/[A-Za-z]+(\/\:[A-Za-z?_]+)*$/g.test(route)) { + if (!/^\/$|^\/[A-Za-z\*]+(\/\:[A-Za-z?_\*]+)*$/g.test(route)) { this.failedRegistrations.push({ reason: RegistrationError.Malformed, route |