Improve proxy fallthrough logic

- Use accept header.
- Match /login and /login/ exactly.
- Match /static/ (trailing slash).
- Use req.path. Same result but feels more accurate to me.
This commit is contained in:
Asher 2020-10-27 17:26:22 -05:00
parent 6ab6cb4f07
commit 305348f0ac
No known key found for this signature in database
GPG Key ID: D63C1EF81242354A
1 changed files with 12 additions and 9 deletions

View File

@ -50,15 +50,18 @@ const maybeProxy = (req: Request): string | undefined => {
* through to allow the redirect and login flow.
*/
const shouldFallThrough = (req: Request): boolean => {
// The ideal would be to have a reliable way to detect if this is a request
// for (or originating from) our root or login HTML. But requests for HTML
// don't seem to set any content type.
return (
req.headers["content-type"] !== "application/json" &&
((req.originalUrl.startsWith("/") && req.method === "GET") ||
(req.originalUrl.startsWith("/static") && req.method === "GET") ||
(req.originalUrl.startsWith("/login") && (req.method === "GET" || req.method === "POST")))
)
// See if it looks like a request for the root or login HTML.
if (req.accepts("text/html")) {
if (
(req.path === "/" && req.method === "GET") ||
(/\/login\/?/.test(req.path) && (req.method === "GET" || req.method === "POST"))
) {
return true
}
}
// See if it looks like a request for a static asset.
return req.path.startsWith("/static/") && req.method === "GET"
}
router.all("*", (req, res, next) => {