Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 690e0af

Browse files
authored
fix: add handle for resolveExternalUri (#5624)
* fix: add handle for resolveExternalUri This adds a fix to properly handle `resolveExternalUri` which is used by extensions like Tabnine. * fixup!: update patch * fixup!: force update proxy patch * fixup!: use proxyEndpointTemplate else manually add * fixup!: throw error if productConfiguration missing * feat(testing): add asExternalUri This modifies the test extension used in e2e test by registering a new command for testing `asExternalUri`. * feat: add e2e test for asExternalUri * docs: update playwright setup comments * feat: add support for VSCODE_PROXY_URI * chore: refresh patches * feat: add test for VSCODE_PROXY_URI * chore: add metadata to lang extension * fixup!: fix part of service-worker patch * fixup!: remove e2e test, update patch notes * fixup!: refresh disable-downloads * fixup!: formatting
1 parent 714afe0 commit 690e0af

File tree

6 files changed

+89
-16
lines changed

6 files changed

+89
-16
lines changed

‎patches/proxy-uri.diff‎

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,15 @@ extensions, use --extensions-dir, or symlink it).
1010

1111
This has e2e tests.
1212

13+
For the `asExternalUri` changes, you'll need to test manually by:
14+
1. running code-server with the test extension
15+
2. Command Palette > code-server: asExternalUri test
16+
3. input a url like http://localhost:3000
17+
4. it should show a notification and show output as <code-server>/proxy/3000
18+
19+
Do the same thing but set `VSCODE_PROXY_URI: "https://{{port}}-main-workspace-name-user-name.coder.com"`
20+
and the output should replace `{{port}}` with port used in input url.
21+
1322
Index: code-server/lib/vscode/src/vs/base/common/product.ts
1423
===================================================================
1524
--- code-server.orig/lib/vscode/src/vs/base/common/product.ts
@@ -68,7 +77,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
6877
rootEndpoint: base,
6978
updateEndpoint: !this._environmentService.args['disable-update-check'] ? base + '/update/check' : undefined,
7079
logoutEndpoint: this._environmentService.args['auth'] && this._environmentService.args['auth'] !== "none" ? base + '/logout' : undefined,
71-
+ proxyEndpointTemplate: base + '/proxy/{{port}}',
80+
+ proxyEndpointTemplate: process.env.VSCODE_PROXY_URI ?? base + '/proxy/{{port}}',
7281
embedderIdentifier: 'server-distro',
7382
extensionsGallery: this._productService.extensionsGallery,
7483
},
@@ -98,3 +107,38 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/terminal/common/terminalE
98107

99108
// Merge config (settings) and ShellLaunchConfig environments
100109
mergeEnvironments(env, allowedEnvFromConfig);
110+
Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts
111+
===================================================================
112+
--- code-server.orig/lib/vscode/src/vs/code/browser/workbench/workbench.ts
113+
+++ code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts
114+
@@ -17,6 +17,7 @@ import { isFolderToOpen, isWorkspaceToOp
115+
import { create, ICredentialsProvider, IURLCallbackProvider, IWorkbenchConstructionOptions, IWorkspace, IWorkspaceProvider } from 'vs/workbench/workbench.web.main';
116+
import { posix } from 'vs/base/common/path';
117+
import { ltrim } from 'vs/base/common/strings';
118+
+import { extractLocalHostUriMetaDataForPortMapping } from 'vs/platform/tunnel/common/tunnel';
119+
120+
interface ICredential {
121+
service: string;
122+
@@ -507,6 +508,21 @@ function doCreateUri(path: string, query
123+
} : undefined,
124+
workspaceProvider: WorkspaceProvider.create(config),
125+
urlCallbackProvider: new LocalStorageURLCallbackProvider(config.callbackRoute),
126+
- credentialsProvider: config.remoteAuthority ? undefined : new LocalStorageCredentialsProvider() // with a remote, we don't use a local credentials provider
127+
+ credentialsProvider: config.remoteAuthority ? undefined : new LocalStorageCredentialsProvider(), // with a remote, we don't use a local credentials provider
128+
+ resolveExternalUri: (uri: URI): Promise<URI> => {
129+
+ let resolvedUri = uri
130+
+ const localhostMatch = extractLocalHostUriMetaDataForPortMapping(uri)
131+
+
132+
+ if (localhostMatch) {
133+
+ if (config.productConfiguration && config.productConfiguration.proxyEndpointTemplate) {
134+
+ resolvedUri = URI.parse(new URL(config.productConfiguration.proxyEndpointTemplate.replace('{{port}}', localhostMatch.port.toString()), window.location.href).toString())
135+
+ } else {
136+
+ throw new Error(`Failed to resolve external URI: ${uri.toString()}. Could not determine base url because productConfiguration missing.`)
137+
+ }
138+
+ }
139+
+
140+
+ // If not localhost, return unmodified
141+
+ return Promise.resolve(resolvedUri)
142+
+ }
143+
});
144+
})();

‎patches/service-worker.diff‎

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,6 @@ Index: code-server/lib/vscode/src/vs/base/common/product.ts
1717

1818
readonly version: string;
1919
readonly date?: string;
20-
Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
21-
===================================================================
22-
--- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts
23-
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
24-
@@ -319,6 +319,10 @@ export class WebClientServer {
25-
updateEndpoint: !this._environmentService.args['disable-update-check'] ? base + '/update/check' : undefined,
26-
logoutEndpoint: this._environmentService.args['auth'] && this._environmentService.args['auth'] !== "none" ? base + '/logout' : undefined,
27-
proxyEndpointTemplate: base + '/proxy/{{port}}',
28-
+ serviceWorker: {
29-
+ scope: vscodeBase + '/',
30-
+ path: base + '/_static/out/browser/serviceWorker.js',
31-
+ },
32-
embedderIdentifier: 'server-distro',
33-
extensionsGallery: this._productService.extensionsGallery,
34-
},
3520
Index: code-server/lib/vscode/src/vs/workbench/browser/client.ts
3621
===================================================================
3722
--- code-server.orig/lib/vscode/src/vs/workbench/browser/client.ts
@@ -65,3 +50,18 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/client.ts
6550
+ }
6651
+ }
6752
}
53+
Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
54+
===================================================================
55+
--- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts
56+
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
57+
@@ -319,6 +319,10 @@ export class WebClientServer {
58+
updateEndpoint: !this._environmentService.args['disable-update-check'] ? base + '/update/check' : undefined,
59+
logoutEndpoint: this._environmentService.args['auth'] && this._environmentService.args['auth'] !== "none" ? base + '/logout' : undefined,
60+
proxyEndpointTemplate: process.env.VSCODE_PROXY_URI ?? base + '/proxy/{{port}}',
61+
+ serviceWorker: {
62+
+ scope: vscodeBase + '/',
63+
+ path: base + '/_static/out/browser/serviceWorker.js',
64+
+ },
65+
embedderIdentifier: 'server-distro',
66+
extensionsGallery: this._productService.extensionsGallery,
67+
},

‎test/e2e/extensions/ms-ceintl.vscode-language-pack-es-1.70.0/package.json‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,11 @@
2828
]
2929
}
3030
]
31+
},
32+
"__metadata": {
33+
"id": "47e020a1-33db-4cc0-a1b4-42f97781749a",
34+
"publisherDisplayName": "MS-CEINTL",
35+
"publisherId": "0b0882c3-aee3-4d7c-b5f9-872f9be0a115",
36+
"isPreReleaseVersion": false
3137
}
3238
}

‎test/e2e/extensions/test-extension/extension.ts‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import * as vscode from "vscode"
22

33
export function activate(context: vscode.ExtensionContext) {
44
vscode.window.showInformationMessage("test extension loaded")
5+
// Test extension
56
context.subscriptions.push(
67
vscode.commands.registerCommand("codeServerTest.proxyUri", () => {
78
if (process.env.VSCODE_PROXY_URI) {
@@ -11,4 +12,20 @@ export function activate(context: vscode.ExtensionContext) {
1112
}
1213
}),
1314
)
15+
16+
// asExternalUri extension
17+
context.subscriptions.push(
18+
vscode.commands.registerCommand("codeServerTest.asExternalUri", async () => {
19+
const input = await vscode.window.showInputBox({
20+
prompt: "URL to pass through to asExternalUri",
21+
})
22+
23+
if (input) {
24+
const output = await vscode.env.asExternalUri(vscode.Uri.parse(input))
25+
vscode.window.showInformationMessage(`input: ${input} output: ${output}`)
26+
} else {
27+
vscode.window.showErrorMessage(`Failed to run test case. No input provided.`)
28+
}
29+
}),
30+
)
1431
}

‎test/e2e/extensions/test-extension/package.json‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@
1717
"command": "codeServerTest.proxyUri",
1818
"title": "Get proxy URI",
1919
"category": "code-server"
20+
},
21+
{
22+
"command": "codeServerTest.asExternalUri",
23+
"title": "asExternalUri test",
24+
"category": "code-server"
2025
}
2126
]
2227
},

‎test/playwright.config.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import path from "path"
88
// yarn test:e2e --workers 1 # Run with one worker
99
// yarn test:e2e --project Chromium # Only run on Chromium
1010
// yarn test:e2e --grep login # Run tests matching "login"
11+
// PWDEBUG=1 yarn test:e2e # Run Playwright inspector
1112
const config: PlaywrightTestConfig = {
1213
testDir: path.join(__dirname, "e2e"), // Search for tests in this directory.
1314
timeout: 60000, // Each test is given 60 seconds.

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /