diff --git a/CHANGELOG.md b/CHANGELOG.md index 90dd8ae840d0..302c7aeb011c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,11 +22,25 @@ Code v99.99.999 ## Unreleased +Code v1.144.0 + +### Changed + +- Update to Code 1.144.0 + ### Fixed - `--socket-fd` now works: the inherited socket is passed on to the process that listens, and the address is logged as `fd:`. Previously code-server failed with `listen EEXIST` or `Server has no address`. +- The cookie domain was not being set against the shared root host of proxy + domains when proxy domains contained template variables like `{{port}}`, + resulting in having to sign in multiple times per domain instead of only once + as originally intended. +- When doing the web socket origin check, if the host does not already contain a + port, fall back to `X-Forwarded-Port`. +- Fix default ports not matching in the web socket origin check (for example + `https://coder.com` will now match `https://coder.com:443`). ## [4.143.1](https://github.com/coder/code-server/releases/tag/v4.143.1) - 2026-10-23 diff --git a/ci/build/update-vscode.sh b/ci/build/update-vscode.sh index b3b4857d2eb4..76a1ad650c48 100755 --- a/ci/build/update-vscode.sh +++ b/ci/build/update-vscode.sh @@ -101,6 +101,14 @@ function update_csp() { echo "Calculated hash as $hash" # Use octothorpe as a delimiter since the hash may contain a slash. sed -i.bak "s#'sha256-[^']\+'#'sha256-$hash'#" "$file" + # For the web worker extension host iframe, there is a matching sha in the + # web server. + if [[ $file == */webWorkerExtensionHostIframe.html ]] ; then + quilt add ./lib/vscode/src/vs/server/node/webClientServer.ts + sed -i.bak \ + "s#webWorkerExtensionHostIframeScriptSHA = 'sha256-[^']\+'#webWorkerExtensionHostIframeScriptSHA = 'sha256-$hash'#" \ + ./lib/vscode/src/vs/server/node/webClientServer.ts + fi done quilt refresh diff --git a/lib/vscode b/lib/vscode index e646868227c3..2c33b50b16c4 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit e646868227c3e3a9e3f24277c8c7220be42c0be7 +Subproject commit 2c33b50b16c472efe58357d1d2a8a5414bc23fbf diff --git a/patches/base-path.diff b/patches/base-path.diff index a300b5904ecb..59c6725ac482 100644 --- a/patches/base-path.diff +++ b/patches/base-path.diff @@ -10,7 +10,7 @@ Index: code-server/lib/vscode/src/vs/base/common/network.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/base/common/network.ts +++ code-server/lib/vscode/src/vs/base/common/network.ts -@@ -256,7 +256,9 @@ class RemoteAuthoritiesImpl { +@@ -262,7 +262,9 @@ class RemoteAuthoritiesImpl { return URI.from({ scheme: platform.isWeb ? this._preferredWebSchema : Schemas.vscodeRemoteResource, authority: `${host}:${port}`, diff --git a/patches/copilot.diff b/patches/copilot.diff index 071d9dc729a6..888cffd27e57 100644 --- a/patches/copilot.diff +++ b/patches/copilot.diff @@ -2,7 +2,7 @@ Index: code-server/lib/vscode/build/gulpfile.extensions.ts =================================================================== --- code-server.orig/lib/vscode/build/gulpfile.extensions.ts +++ code-server/lib/vscode/build/gulpfile.extensions.ts -@@ -294,6 +294,29 @@ export const compileCopilotExtensionBuil +@@ -283,6 +283,29 @@ export const compileCopilotExtensionBuil task.task(compileCopilotExtensionBuildTask); /** diff --git a/patches/csp-hashes.diff b/patches/csp-hashes.diff index 6eac9f88aff6..3e9f215c7f81 100644 --- a/patches/csp-hashes.diff +++ b/patches/csp-hashes.diff @@ -6,8 +6,8 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/index -+ content="default-src 'none'; script-src 'sha256-FYdHnaDkSHwSK3TmWDrs/tT+X4bK+aaoa9yy432BONk=' 'self'; frame-src 'self'; style-src 'unsafe-inline';"> +- content="default-src 'none'; script-src 'sha256-Q3Tfcw0dGu/YD4dGBrRqBeOnmRMAH8HbKxArK4YSXBc=' 'self'; frame-src 'self'; style-src 'unsafe-inline';"> ++ content="default-src 'none'; script-src 'sha256-BmcTt6YZr75RujSQ3gF/UQL77e1RrOx62jNeikpwtxc=' 'self'; frame-src 'self'; style-src 'unsafe-inline';"> +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 +@@ -114,7 +114,7 @@ const APP_ROOT = dirname(FileAccess.asFi + const STATIC_PATH = `/static`; + const CALLBACK_PATH = `/callback`; + const WEB_EXTENSION_PATH = `/web-extension-resource`; +-const webWorkerExtensionHostIframeScriptSHA = 'sha256-daEgfo2VIXpx2Np71KqCCbkeQwv+68vPrx54XRcbdcs='; ++const webWorkerExtensionHostIframeScriptSHA = 'sha256-gfjiOVjAlxqrivZAfTq2d83mOaz0fnAxbGaFpj5IjD8='; + + /** + * Substitutes the `{{...}}` placeholders of a workbench template. Placeholders must only ever diff --git a/patches/getting-started.diff b/patches/getting-started.diff index 857db3b8fd93..94c66456b344 100644 --- a/patches/getting-started.diff +++ b/patches/getting-started.diff @@ -19,7 +19,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro import { renderFormattedText } from '../../../../base/browser/formattedTextRenderer.js'; import { status } from '../../../../base/browser/ui/aria/aria.js'; import { StandardKeyboardEvent } from '../../../../base/browser/keyboardEvent.js'; -@@ -55,7 +55,7 @@ import { IRecentFolder, IRecentWorkspace +@@ -56,7 +56,7 @@ import { IRecentFolder, IRecentWorkspace import { OpenRecentAction } from '../../../browser/actions/windowActions.js'; import { OpenFileFolderAction, OpenFolderAction, OpenFolderViaWorkspaceAction } from '../../../browser/actions/workspaceActions.js'; import { EditorPane } from '../../../browser/parts/editor/editorPane.js'; @@ -28,7 +28,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro import { IEditorOpenContext, IEditorSerializer } from '../../../common/editor.js'; import { IWebviewElement, IWebviewService } from '../../webview/browser/webview.js'; import './gettingStartedColors.js'; -@@ -930,6 +930,72 @@ export class GettingStartedPage extends +@@ -944,6 +944,72 @@ export class GettingStartedPage extends $('p.subtitle.description', {}, localize({ key: 'gettingStarted.editingEvolved', comment: ['Shown as subtitle on the Welcome page.'] }, "Editing evolved")) ); @@ -101,7 +101,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro const leftColumn = $('.categories-column.categories-column-left', {},); const rightColumn = $('.categories-column.categories-column-right', {},); -@@ -980,6 +1046,9 @@ export class GettingStartedPage extends +@@ -1000,6 +1066,9 @@ export class GettingStartedPage extends recentList.setLimit(5); reset(leftColumn, startList.getDomElement(), recentList.getDomElement()); } diff --git a/patches/integration.diff b/patches/integration.diff index 92f5e8181256..d41b959a5374 100644 --- a/patches/integration.diff +++ b/patches/integration.diff @@ -169,7 +169,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/web.main.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/browser/web.main.ts +++ code-server/lib/vscode/src/vs/workbench/browser/web.main.ts -@@ -64,6 +64,7 @@ import { IOpenerService } from '../../pl +@@ -65,6 +65,7 @@ import { IOpenerService } from '../../pl import { mixin, safeStringify } from '../../base/common/objects.js'; import { IndexedDB } from '../../base/browser/indexedDB.js'; import { WebFileSystemAccess } from '../../platform/files/browser/webFileSystemAccess.js'; @@ -177,7 +177,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/web.main.ts import { IProgressService } from '../../platform/progress/common/progress.js'; import { DelayedLogChannel } from '../services/output/common/delayedLogChannel.js'; import { dirname, joinPath } from '../../base/common/resources.js'; -@@ -140,6 +141,9 @@ export class BrowserMain extends Disposa +@@ -141,6 +142,9 @@ export class BrowserMain extends Disposa // Startup const instantiationService = workbench.startup(); diff --git a/patches/marketplace.diff b/patches/marketplace.diff index 5e867ee61a51..6991967abe5c 100644 --- a/patches/marketplace.diff +++ b/patches/marketplace.diff @@ -77,7 +77,7 @@ Index: code-server/lib/vscode/src/vs/platform/extensionResourceLoader/common/ext import { TargetPlatform } from '../../extensions/common/extensions.js'; import { ExtensionGalleryResourceType, getExtensionGalleryManifestResourceUri, IExtensionGalleryManifest, IExtensionGalleryManifestService } from '../../extensionManagement/common/extensionGalleryManifest.js'; import { ILogService } from '../../log/common/log.js'; -@@ -163,9 +162,9 @@ export abstract class AbstractExtensionR +@@ -167,9 +166,9 @@ export abstract class AbstractExtensionR } protected _isWebExtensionResourceEndPoint(uri: URI): boolean { diff --git a/patches/proposed-api.diff b/patches/proposed-api.diff index edb6f54a7743..3b2286b043e7 100644 --- a/patches/proposed-api.diff +++ b/patches/proposed-api.diff @@ -10,7 +10,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/extensions/common/extens =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/services/extensions/common/extensions.ts +++ code-server/lib/vscode/src/vs/workbench/services/extensions/common/extensions.ts -@@ -321,6 +321,10 @@ function extensionDescriptionArrayToMap( +@@ -324,6 +324,10 @@ function extensionDescriptionArrayToMap( } export function isProposedApiEnabled(extension: IExtensionDescription, proposal: ApiProposalName): boolean { diff --git a/patches/remote-storage.diff b/patches/remote-storage.diff index 4ceb92d7ed2e..a628071442ee 100644 --- a/patches/remote-storage.diff +++ b/patches/remote-storage.diff @@ -179,7 +179,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/web.main.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/browser/web.main.ts +++ code-server/lib/vscode/src/vs/workbench/browser/web.main.ts -@@ -33,6 +33,7 @@ import { ISignService } from '../../plat +@@ -34,6 +34,7 @@ import { ISignService } from '../../plat import { SignService } from '../../platform/sign/browser/signService.js'; import { IWorkbenchConstructionOptions, IWorkbench, IWorkspace, ITunnel } from './web.api.js'; import { BrowserStorageService } from '../services/storage/browser/storageService.js'; @@ -187,7 +187,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/web.main.ts import { IStorageService } from '../../platform/storage/common/storage.js'; import { toLocalISOString } from '../../base/common/date.js'; import { isWorkspaceToOpen, isFolderToOpen } from '../../platform/window/common/window.js'; -@@ -482,7 +483,7 @@ export class BrowserMain extends Disposa +@@ -488,7 +489,7 @@ export class BrowserMain extends Disposa serviceCollection.set(IWorkbenchConfigurationService, service); return service; }), @@ -196,7 +196,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/web.main.ts serviceCollection.set(IStorageService, service); return service; }) -@@ -604,7 +605,21 @@ export class BrowserMain extends Disposa +@@ -610,7 +611,21 @@ export class BrowserMain extends Disposa })); }