Create helper for determining if route is the root

This commit is contained in:
Asher 2020-04-01 11:28:09 -05:00
parent 74a0bacdcf
commit 411c61fb02
No known key found for this signature in database
GPG Key ID: D63C1EF81242354A
7 changed files with 15 additions and 14 deletions

View File

@ -43,8 +43,7 @@ export class ApiHttpProvider extends HttpProvider {
public async handleRequest(route: Route, request: http.IncomingMessage): Promise<HttpResponse> { public async handleRequest(route: Route, request: http.IncomingMessage): Promise<HttpResponse> {
this.ensureAuthenticated(request) this.ensureAuthenticated(request)
// Only serve root pages. if (!this.isRoot(route)) {
if (route.requestPath && route.requestPath !== "/index.html") {
throw new HttpError("Not found", HttpCode.NotFound) throw new HttpError("Not found", HttpCode.NotFound)
} }

View File

@ -20,8 +20,7 @@ export class DashboardHttpProvider extends HttpProvider {
} }
public async handleRequest(route: Route, request: http.IncomingMessage): Promise<HttpResponse> { public async handleRequest(route: Route, request: http.IncomingMessage): Promise<HttpResponse> {
// Only serve root pages. if (!this.isRoot(route)) {
if (route.requestPath && route.requestPath !== "/index.html") {
throw new HttpError("Not found", HttpCode.NotFound) throw new HttpError("Not found", HttpCode.NotFound)
} }

View File

@ -18,8 +18,7 @@ interface LoginPayload {
*/ */
export class LoginHttpProvider extends HttpProvider { export class LoginHttpProvider extends HttpProvider {
public async handleRequest(route: Route, request: http.IncomingMessage): Promise<HttpResponse> { public async handleRequest(route: Route, request: http.IncomingMessage): Promise<HttpResponse> {
// Only serve root pages and only if password authentication is enabled. if (this.options.auth !== AuthType.Password || !this.isRoot(route)) {
if (this.options.auth !== AuthType.Password || (route.requestPath && route.requestPath !== "/index.html")) {
throw new HttpError("Not found", HttpCode.NotFound) throw new HttpError("Not found", HttpCode.NotFound)
} }
switch (route.base) { switch (route.base) {

View File

@ -41,10 +41,8 @@ export class ProxyHttpProvider extends HttpProvider implements HttpProxyProvider
request: http.IncomingMessage, request: http.IncomingMessage,
response: http.ServerResponse, response: http.ServerResponse,
): Promise<HttpResponse> { ): Promise<HttpResponse> {
const isRoot = !route.requestPath || route.requestPath === "/index.html"
if (!this.authenticated(request)) { if (!this.authenticated(request)) {
// Only redirect from the root. Other requests get an unauthorized error. if (this.isRoot(route)) {
if (isRoot) {
return { redirect: "/login", query: { to: route.fullPath } } return { redirect: "/login", query: { to: route.fullPath } }
} }
throw new HttpError("Unauthorized", HttpCode.Unauthorized) throw new HttpError("Unauthorized", HttpCode.Unauthorized)
@ -53,7 +51,7 @@ export class ProxyHttpProvider extends HttpProvider implements HttpProxyProvider
// Ensure there is a trailing slash so relative paths work correctly. // Ensure there is a trailing slash so relative paths work correctly.
const port = route.base.replace(/^\//, "") const port = route.base.replace(/^\//, "")
const base = `${this.options.base}/${port}` const base = `${this.options.base}/${port}`
if (isRoot && !route.fullPath.endsWith("/")) { if (this.isRoot(route) && !route.fullPath.endsWith("/")) {
return { return {
redirect: `${base}/`, redirect: `${base}/`,
} }

View File

@ -61,8 +61,7 @@ export class UpdateHttpProvider extends HttpProvider {
this.ensureAuthenticated(request) this.ensureAuthenticated(request)
this.ensureMethod(request) this.ensureMethod(request)
// Only serve root pages. if (!this.isRoot(route)) {
if (route.requestPath && route.requestPath !== "/index.html") {
throw new HttpError("Not found", HttpCode.NotFound) throw new HttpError("Not found", HttpCode.NotFound)
} }

View File

@ -128,8 +128,7 @@ export class VscodeHttpProvider extends HttpProvider {
switch (route.base) { switch (route.base) {
case "/": case "/":
// Only serve this at the root. if (!this.isRoot(route)) {
if (route.requestPath && route.requestPath !== "/index.html") {
throw new HttpError("Not found", HttpCode.NotFound) throw new HttpError("Not found", HttpCode.NotFound)
} else if (!this.authenticated(request)) { } else if (!this.authenticated(request)) {
return { redirect: "/login", query: { to: this.options.base } } return { redirect: "/login", query: { to: this.options.base } }

View File

@ -359,6 +359,14 @@ export abstract class HttpProvider {
} }
return cookies as T return cookies as T
} }
/**
* Return true if the route is for the root page. For example /base, /base/,
* or /base/index.html but not /base/path or /base/file.js.
*/
protected isRoot(route: Route): boolean {
return !route.requestPath || route.requestPath === "/index.html"
}
} }
/** /**