import * as http from "http" import { HttpCode, HttpError } from "../../common/http" import { HttpProvider, HttpResponse, Route, WsResponse } from "../http" /** * Proxy HTTP provider. */ export class ProxyHttpProvider extends HttpProvider { public async handleRequest(route: Route, request: http.IncomingMessage): Promise { if (!this.authenticated(request)) { if (this.isRoot(route)) { return { redirect: "/login", query: { to: route.fullPath } } } throw new HttpError("Unauthorized", HttpCode.Unauthorized) } // Ensure there is a trailing slash so relative paths work correctly. if (this.isRoot(route) && !route.fullPath.endsWith("/")) { return { redirect: `${route.fullPath}/`, } } const port = route.base.replace(/^\//, "") return { proxy: { base: `${this.options.base}/${port}`, port, }, } } public async handleWebSocket(route: Route, request: http.IncomingMessage): Promise { this.ensureAuthenticated(request) const port = route.base.replace(/^\//, "") return { proxy: { base: `${this.options.base}/${port}`, port, }, } } }