From 80518ae7bf05110d100e84a28882f33b1cc2904a Mon Sep 17 00:00:00 2001 From: Asher Date: Wed, 29 Sep 2021 19:06:07 +0000 Subject: [PATCH 1/3] Add resolver environment to extension host These actually appear unused but we will be making use of them for the proxy URI environment variable. --- src/vs/server/connection/extensionHostConnection.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/vs/server/connection/extensionHostConnection.ts b/src/vs/server/connection/extensionHostConnection.ts index 52d21db35c5ad..bb37dfbd9fd0e 100644 --- a/src/vs/server/connection/extensionHostConnection.ts +++ b/src/vs/server/connection/extensionHostConnection.ts @@ -143,6 +143,7 @@ export class ExtensionHostConnection extends AbstractConnection { debug: this.startParams.break ? undefined : portNumber, args: ['--type=extensionHost', '--skipWorkspaceStorageLock'], env: { + ...(this.startParams.env || {}), VSCODE_AMD_ENTRYPOINT: 'vs/workbench/services/extensions/node/extensionHostProcess', VSCODE_PIPE_LOGGING: true, VSCODE_VERBOSE_LOGGING: true, From 42dfa5763963f53eb4907b40f42b47ed3b8af07a Mon Sep 17 00:00:00 2001 From: Asher Date: Wed, 29 Sep 2021 19:09:33 +0000 Subject: [PATCH 2/3] Add VSCODE_PROXY_URI to terminal environment --- src/vs/server/ipc/terminalProviderIpc.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/vs/server/ipc/terminalProviderIpc.ts b/src/vs/server/ipc/terminalProviderIpc.ts index 5cd4e8f361ca1..6ebb24af5f1ec 100644 --- a/src/vs/server/ipc/terminalProviderIpc.ts +++ b/src/vs/server/ipc/terminalProviderIpc.ts @@ -140,11 +140,11 @@ export class TerminalProviderChannel implements IServerChannel => { const env = await this.ptyService.getEnvironment(); - env.VSCODE_IPC_HOOK_CLI = process.env['VSCODE_IPC_HOOK_CLI']!; + env.VSCODE_IPC_HOOK_CLI = process.env.VSCODE_IPC_HOOK_CLI; + env.VSCODE_PROXY_URI = args.resolverEnv?.VSCODE_PROXY_URI || process.env.VSCODE_PROXY_URI; return env; }; From 3bed399b2021a75c0dd4f9c9545c43f6c91fd851 Mon Sep 17 00:00:00 2001 From: Asher Date: Mon, 27 Sep 2021 19:30:55 +0000 Subject: [PATCH 3/3] Add VSCODE_PROXY_URI to resolver environment Closes https://github.com/cdr/code-server/issues/1510. This environment passes down to terminals and extension hosts. --- .../remote/browser/remoteAuthorityResolverService.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/vs/platform/remote/browser/remoteAuthorityResolverService.ts b/src/vs/platform/remote/browser/remoteAuthorityResolverService.ts index 76bb55627fe14..dd02058056a65 100644 --- a/src/vs/platform/remote/browser/remoteAuthorityResolverService.ts +++ b/src/vs/platform/remote/browser/remoteAuthorityResolverService.ts @@ -8,6 +8,8 @@ import { Disposable } from 'vs/base/common/lifecycle'; import { RemoteAuthorities } from 'vs/base/common/network'; import { URI } from 'vs/base/common/uri'; import { IRemoteAuthorityResolverService, IRemoteConnectionData, ResolvedAuthority, ResolverResult } from 'vs/platform/remote/common/remoteAuthorityResolver'; +import { Options } from 'vs/base/common/ipc'; +import { getOptions } from 'vs/base/common/util'; export class RemoteAuthorityResolverService extends Disposable implements IRemoteAuthorityResolverService { @@ -59,11 +61,14 @@ export class RemoteAuthorityResolverService extends Disposable implements IRemot private _doResolveAuthority(authority: string): ResolverResult { const connectionToken = this._connectionTokens.get(authority) || this._connectionToken; + // NOTE@coder: Add the proxy URI to the environment for use in the remote. + const options = getOptions(); + const extensionHostEnv = { VSCODE_PROXY_URI: `${window.location.origin}${options.base}/proxy/{port}` }; if (authority.indexOf(':') >= 0) { const pieces = authority.split(':'); - return { authority: { authority, host: pieces[0], port: parseInt(pieces[1], 10), connectionToken } }; + return { authority: { authority, host: pieces[0], port: parseInt(pieces[1], 10), connectionToken }, options: { extensionHostEnv } }; } - return { authority: { authority, host: authority, port: 80, connectionToken } }; + return { authority: { authority, host: authority, port: 80, connectionToken }, options: { extensionHostEnv } }; } _clearResolvedAuthority(authority: string): void {