From c23e707c1f80ea670f7c48b1806b8efbfcd6ef85 Mon Sep 17 00:00:00 2001 From: Dean Sheather Date: Sun, 2 Jun 2019 18:35:01 +1000 Subject: [PATCH 1/2] add port to redirect URL when server port is 80 This fixes HTTP to HTTPS redirects when people are running code-server on port 80 (default HTTP port). --- packages/server/src/cli.ts | 1 + packages/server/src/server.ts | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/packages/server/src/cli.ts b/packages/server/src/cli.ts index 629a961d97cb..eed975ff5ff4 100644 --- a/packages/server/src/cli.ts +++ b/packages/server/src/cli.ts @@ -273,6 +273,7 @@ const bold = (text: string | number): string | number => { }, }, password, + port, httpsOptions: hasCustomHttps ? { key: certKeyData, cert: certData, diff --git a/packages/server/src/server.ts b/packages/server/src/server.ts index b7d9a12cdbee..1dc77b506fdb 100644 --- a/packages/server/src/server.ts +++ b/packages/server/src/server.ts @@ -28,6 +28,7 @@ interface CreateAppOptions { registerMiddleware?: (app: express.Application) => void; serverOptions?: ServerOptions; password?: string; + port?: number; httpsOptions?: https.ServerOptions; allowHttp?: boolean; bypassAuth?: boolean; @@ -197,6 +198,12 @@ export const createApp = async (options: CreateAppOptions): Promise<{ ): void => { const currentUrl = `${protocol}://${req.headers.host}${req.originalUrl}`; const newUrl = url.parse(currentUrl); + if (newUrl.port == null && options.port === 80) { + // Fix for https redirect on default port. The redirect would go to a URL without a port, so the + // browser would assume that it's redirecting to port 443. + newUrl.host += `:${options.port}`; + newUrl.port = "" + options.port; + } if (from && newUrl.pathname) { newUrl.pathname = newUrl.pathname.replace(new RegExp(`\/${from}\/?$`), "/"); } From da5d190b46bf956f71f7dcd7a4795e00573d327c Mon Sep 17 00:00:00 2001 From: Dean Sheather Date: Sun, 2 Jun 2019 22:12:54 +1000 Subject: [PATCH 2/2] add https check to redirect port fixer --- packages/server/src/server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/server/src/server.ts b/packages/server/src/server.ts index 1dc77b506fdb..2c744da844c7 100644 --- a/packages/server/src/server.ts +++ b/packages/server/src/server.ts @@ -198,7 +198,7 @@ export const createApp = async (options: CreateAppOptions): Promise<{ ): void => { const currentUrl = `${protocol}://${req.headers.host}${req.originalUrl}`; const newUrl = url.parse(currentUrl); - if (newUrl.port == null && options.port === 80) { + if (newUrl.port == null && protocol === "https" && options.port === 80) { // Fix for https redirect on default port. The redirect would go to a URL without a port, so the // browser would assume that it's redirecting to port 443. newUrl.host += `:${options.port}`;