mirror of
https://github.com/coder/code-server.git
synced 2025-07-29 21:12:58 +08:00

* Update VS Code to 1.92.2 * Use server-main.js to load VS Code It looks like the bootstrap files are now bundled so we can no longer require them. We could make them included again, but maybe it is better to go through the main entrypoint anyway because it includes some nls stuff which is maybe necessary. This also fixes what looks like a bug where we could create two servers if two requests came in. I am not sure what the practical consequences of that would be, but it will no longer do that. * Drop es2020 patch Unfortunately, VS Code will not load with this. It seems to be because `this` is being used in static properties, and it becomes `void 0` for some reason under the es2020 target. For example: static PREFIX_BY_CATEGORY = `${this.PREFIX}${this.SCOPE_PREFIX}`; becomes AbstractGotoSymbolQuickAccessProvider.PREFIX_BY_CATEGORY = `${(void 0).PREFIX}${(void 0).SCOPE_PREFIX}`; Which, obviously, will not work. Older versions of Safari (and maybe other browsers) are likely affected. * Fix display language * Update Playwright I think maybe because of the dropped es2020 patch that Webkit is now failing because it is too old. * Do not wait for networkidle in e2e tests I am not sure what is going on but some tests on Webkit are timing out and it seems the page is loaded but something is still trying to download. Not good, but for now try to at least get the tests passing.
108 lines
4.6 KiB
Diff
108 lines
4.6 KiB
Diff
Add a logout command and menu item
|
|
|
|
This will only show if you have authentication enabled.
|
|
|
|
This has e2e tests but are currently disabled and need to be fixed.
|
|
|
|
Index: code-server/lib/vscode/src/vs/base/common/product.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/base/common/product.ts
|
|
+++ code-server/lib/vscode/src/vs/base/common/product.ts
|
|
@@ -58,6 +58,7 @@ export interface IProductConfiguration {
|
|
readonly codeServerVersion?: string
|
|
readonly rootEndpoint?: string
|
|
readonly updateEndpoint?: string
|
|
+ readonly logoutEndpoint?: string
|
|
|
|
readonly version: string;
|
|
readonly date?: string;
|
|
Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/server/node/serverEnvironmentService.ts
|
|
+++ code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts
|
|
@@ -15,6 +15,7 @@ import { URI } from 'vs/base/common/uri'
|
|
export const serverOptions: OptionDescriptions<Required<ServerParsedArgs>> = {
|
|
/* ----- code-server ----- */
|
|
'disable-update-check': { type: 'boolean' },
|
|
+ 'auth': { type: 'string' },
|
|
|
|
/* ----- server setup ----- */
|
|
|
|
@@ -97,6 +98,7 @@ export const serverOptions: OptionDescri
|
|
export interface ServerParsedArgs {
|
|
/* ----- code-server ----- */
|
|
'disable-update-check'?: boolean;
|
|
+ 'auth'?: string;
|
|
|
|
/* ----- server setup ----- */
|
|
|
|
Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts
|
|
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
|
@@ -311,6 +311,7 @@ export class WebClientServer {
|
|
codeServerVersion: this._productService.codeServerVersion,
|
|
rootEndpoint: base,
|
|
updateEndpoint: !this._environmentService.args['disable-update-check'] ? base + '/update/check' : undefined,
|
|
+ logoutEndpoint: this._environmentService.args['auth'] && this._environmentService.args['auth'] !== "none" ? base + '/logout' : undefined,
|
|
embedderIdentifier: 'server-distro',
|
|
extensionsGallery: this._productService.extensionsGallery,
|
|
} satisfies Partial<IProductConfiguration>;
|
|
Index: code-server/lib/vscode/src/vs/workbench/browser/client.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/workbench/browser/client.ts
|
|
+++ code-server/lib/vscode/src/vs/workbench/browser/client.ts
|
|
@@ -1,11 +1,15 @@
|
|
import { Disposable } from 'vs/base/common/lifecycle';
|
|
import { localize } from 'vs/nls';
|
|
+import { MenuId, MenuRegistry } from 'vs/platform/actions/common/actions';
|
|
+import { CommandsRegistry } from 'vs/platform/commands/common/commands';
|
|
import { ILogService } from 'vs/platform/log/common/log';
|
|
import { INotificationService, Severity } from 'vs/platform/notification/common/notification';
|
|
import { IProductService } from 'vs/platform/product/common/productService';
|
|
import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage';
|
|
|
|
export class CodeServerClient extends Disposable {
|
|
+ static LOGOUT_COMMAND_ID = 'code-server.logout';
|
|
+
|
|
constructor (
|
|
@ILogService private logService: ILogService,
|
|
@INotificationService private notificationService: INotificationService,
|
|
@@ -81,6 +85,10 @@ export class CodeServerClient extends Di
|
|
if (this.productService.updateEndpoint) {
|
|
this.checkUpdates(this.productService.updateEndpoint)
|
|
}
|
|
+
|
|
+ if (this.productService.logoutEndpoint) {
|
|
+ this.addLogoutCommand(this.productService.logoutEndpoint);
|
|
+ }
|
|
}
|
|
|
|
private checkUpdates(updateEndpoint: string) {
|
|
@@ -132,4 +140,25 @@ export class CodeServerClient extends Di
|
|
|
|
updateLoop();
|
|
}
|
|
+
|
|
+ private addLogoutCommand(logoutEndpoint: string) {
|
|
+ CommandsRegistry.registerCommand(CodeServerClient.LOGOUT_COMMAND_ID, () => {
|
|
+ const logoutUrl = new URL(logoutEndpoint, window.location.href);
|
|
+ // Cookies must be set with absolute paths and must use the same path to
|
|
+ // be unset (we set it on the root) so send the relative root and the
|
|
+ // current href so the backend can derive the absolute path to the root.
|
|
+ logoutUrl.searchParams.set('base', this.productService.rootEndpoint || ".");
|
|
+ logoutUrl.searchParams.set('href', window.location.href);
|
|
+ window.location.assign(logoutUrl);
|
|
+ });
|
|
+
|
|
+ for (const menuId of [MenuId.CommandPalette, MenuId.MenubarHomeMenu]) {
|
|
+ MenuRegistry.appendMenuItem(menuId, {
|
|
+ command: {
|
|
+ id: CodeServerClient.LOGOUT_COMMAND_ID,
|
|
+ title: localize('logout', "Sign out of {0}", 'code-server'),
|
|
+ },
|
|
+ });
|
|
+ }
|
|
+ }
|
|
}
|