From c0dd29c59183461c3f2fbb32813690346a08bb6a Mon Sep 17 00:00:00 2001 From: Asher Date: Tue, 24 Mar 2020 14:29:48 -0500 Subject: [PATCH] Fix domains with ports & localhost subdomains --- src/node/app/proxy.ts | 15 ++++++++------- src/node/http.ts | 7 ++++--- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/node/app/proxy.ts b/src/node/app/proxy.ts index e069d2e6..7b79d96f 100644 --- a/src/node/app/proxy.ts +++ b/src/node/app/proxy.ts @@ -61,7 +61,9 @@ export class ProxyHttpProvider extends HttpProvider implements HttpProxyProvider current = domain } }) - return current || host + // Setting the domain to localhost doesn't seem to work for subdomains (for + // example dev.localhost). + return current && current !== "localhost" ? current : host } public maybeProxyRequest( @@ -90,12 +92,11 @@ export class ProxyHttpProvider extends HttpProvider implements HttpProxyProvider return undefined } - // At minimum there needs to be sub.domain.tld. - const host = request.headers.host - const parts = host && host.split(".") - if (!parts || parts.length < 3) { - return undefined - } + // Split into parts. + const host = request.headers.host || "" + const idx = host.indexOf(":") + const domain = idx !== -1 ? host.substring(0, idx) : host + const parts = domain.split(".") // There must be an exact match. const port = parts.shift() diff --git a/src/node/http.ts b/src/node/http.ts index 5b62eef6..52503308 100644 --- a/src/node/http.ts +++ b/src/node/http.ts @@ -581,6 +581,9 @@ export class HttpServer { this.heart.beat() const route = this.parseUrl(request) const write = (payload: HttpResponse): void => { + const host = request.headers.host || "" + const idx = host.indexOf(":") + const domain = idx !== -1 ? host.substring(0, idx) : host response.writeHead(payload.redirect ? HttpCode.Redirect : payload.code || HttpCode.Ok, { "Content-Type": payload.mime || getMediaMime(payload.filePath), ...(payload.redirect ? { Location: this.constructRedirect(request, route, payload as RedirectResponse) } : {}), @@ -591,9 +594,7 @@ export class HttpServer { "Set-Cookie": [ `${payload.cookie.key}=${payload.cookie.value}`, `Path=${normalize(payload.cookie.path || "/", true)}`, - request.headers.host - ? `Domain=${(this.proxy && this.proxy.getCookieDomain(request.headers.host)) || request.headers.host}` - : undefined, + domain ? `Domain=${(this.proxy && this.proxy.getCookieDomain(domain)) || domain}` : undefined, // "HttpOnly", "SameSite=strict", ]