@theia/plugin-ext 1.74.0-next.17 → 1.74.0-next.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-http-resolver.d.ts","sourceRoot":"","sources":["../../../src/main/node/plugin-http-resolver.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAkB,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAMnF,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAGrF;;;;GAIG;AACH,qBACa,0BAA2B,YAAW,sBAAsB;IAErE,OAAO,CAAC,cAAc,CAAmB;IAGzC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;;IAc3C;;OAEG;IACG,OAAO,CAAC,qBAAqB,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC;IAgClF;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAGpC"}
1
+ {"version":3,"file":"plugin-http-resolver.d.ts","sourceRoot":"","sources":["../../../src/main/node/plugin-http-resolver.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAkB,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAKnF,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAGrF;;;;GAIG;AACH,qBACa,0BAA2B,YAAW,sBAAsB;IAErE,OAAO,CAAC,cAAc,CAAmB;IAGzC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;;IAc3C;;OAEG;IACG,OAAO,CAAC,qBAAqB,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC;IAkClF;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAGpC"}
@@ -22,7 +22,6 @@ const inversify_1 = require("@theia/core/shared/inversify");
22
22
  const promise_util_1 = require("@theia/core/lib/common/promise-util");
23
23
  const fs_1 = require("fs");
24
24
  const path = require("path");
25
- const url = require("url");
26
25
  const temp_dir_util_1 = require("./temp-dir-util");
27
26
  /**
28
27
  * Resolver that handle the http(s): protocol
@@ -49,8 +48,11 @@ let HttpPluginDeployerResolver = class HttpPluginDeployerResolver {
49
48
  // download the file
50
49
  // keep filename of the url
51
50
  const urlPath = pluginResolverContext.getOriginId();
52
- const link = url.parse(urlPath);
53
- if (!link.pathname) {
51
+ let link;
52
+ try {
53
+ link = new URL(urlPath);
54
+ }
55
+ catch {
54
56
  throw new Error('invalid link URI' + urlPath);
55
57
  }
56
58
  const dirname = path.dirname(link.pathname);
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-http-resolver.js","sourceRoot":"","sources":["../../../src/main/node/plugin-http-resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-http-resolver.js","sourceRoot":"","sources":["../../../src/main/node/plugin-http-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=plugin-http-resolver.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-http-resolver.spec.d.ts","sourceRoot":"","sources":["../../../src/main/node/plugin-http-resolver.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 EclipseSource and others.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const chai_1 = require("chai");
19
+ const plugin_http_resolver_1 = require("./plugin-http-resolver");
20
+ describe('HttpPluginDeployerResolver', () => {
21
+ function createContext(originId) {
22
+ return {
23
+ getOriginId: () => originId
24
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
25
+ };
26
+ }
27
+ it('should reject a malformed link URI', async () => {
28
+ const resolver = new plugin_http_resolver_1.HttpPluginDeployerResolver();
29
+ let error;
30
+ try {
31
+ await resolver.resolve(createContext(':::not a url'));
32
+ }
33
+ catch (e) {
34
+ error = e;
35
+ }
36
+ (0, chai_1.expect)(error).to.be.an.instanceOf(Error);
37
+ (0, chai_1.expect)(error.message).to.contain('invalid link URI');
38
+ });
39
+ });
40
+ //# sourceMappingURL=plugin-http-resolver.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-http-resolver.spec.js","sourceRoot":"","sources":["../../../src/main/node/plugin-http-resolver.spec.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,+CAA+C;AAC/C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;AAEhF,+BAA8B;AAC9B,iEAAoE;AAGpE,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAExC,SAAS,aAAa,CAAC,QAAgB;QACnC,OAAO;YACH,WAAW,EAAE,GAAG,EAAE,CAAC,QAAQ;YAC3B,8DAA8D;SACzB,CAAC;IAC9C,CAAC;IAED,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,QAAQ,GAAG,IAAI,iDAA0B,EAAE,CAAC;QAClD,IAAI,KAAwB,CAAC;QAC7B,IAAI,CAAC;YACD,MAAM,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,KAAK,GAAG,CAAU,CAAC;QACvB,CAAC;QACD,IAAA,aAAM,EAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACzC,IAAA,aAAM,EAAC,KAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-service.d.ts","sourceRoot":"","sources":["../../../src/main/node/plugin-service.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAI7B,OAAO,KAAK,OAAO,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAI1F,OAAO,EAAE,8BAA8B,EAAE,MAAM,4CAA4C,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAE1F,qBACa,qBAAsB,YAAW,8BAA8B,EAAE,8BAA8B;IAExG,SAAS,CAAC,6BAA6B,EAAE,MAAM,CAAC;IAEhD,SAAS,CAAC,eAAe,EAAE,OAAO,CAAS;IAG3C,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAG1D,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAGvD,SAAS,CAAC,IAAI,IAAI,IAAI;IAMtB,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,GAAG,IAAI;IAazC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC,OAAO,CAAC;IAWpE,SAAS,CAAC,8BAA8B,IAAI,MAAM;IAalD;;OAEG;IACH,SAAS,CAAC,uBAAuB,IAAI,MAAM;CAM9C"}
1
+ {"version":3,"file":"plugin-service.d.ts","sourceRoot":"","sources":["../../../src/main/node/plugin-service.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,OAAO,KAAK,OAAO,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAI1F,OAAO,EAAE,8BAA8B,EAAE,MAAM,4CAA4C,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAE1F,qBACa,qBAAsB,YAAW,8BAA8B,EAAE,8BAA8B;IAExG,SAAS,CAAC,6BAA6B,EAAE,MAAM,CAAC;IAEhD,SAAS,CAAC,eAAe,EAAE,OAAO,CAAS;IAG3C,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAG1D,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAGvD,SAAS,CAAC,IAAI,IAAI,IAAI;IAMtB,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,GAAG,IAAI;IAazC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC,OAAO,CAAC;IAgBpE,SAAS,CAAC,8BAA8B,IAAI,MAAM;IAalD;;OAEG;IACH,SAAS,CAAC,uBAAuB,IAAI,MAAM;CAM9C"}
@@ -18,7 +18,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.PluginApiContribution = void 0;
19
19
  const tslib_1 = require("tslib");
20
20
  const path = require("path");
21
- const url = require("url");
22
21
  const vhost = require('vhost');
23
22
  const express = require("@theia/core/shared/express");
24
23
  const inversify_1 = require("@theia/core/shared/inversify");
@@ -50,8 +49,14 @@ let PluginApiContribution = class PluginApiContribution {
50
49
  }
51
50
  allowWsUpgrade(request) {
52
51
  if (request.headers.origin && !this.serveSameOrigin) {
53
- const origin = url.parse(request.headers.origin);
54
- if (origin.host && this.webviewExternalEndpointRegExp.test(origin.host)) {
52
+ let host;
53
+ try {
54
+ host = new URL(request.headers.origin).host;
55
+ }
56
+ catch {
57
+ host = undefined;
58
+ }
59
+ if (host && this.webviewExternalEndpointRegExp.test(host)) {
55
60
  // If the origin comes from the WebViews, refuse:
56
61
  return false;
57
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-service.js","sourceRoot":"","sources":["../../../src/main/node/plugin-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-service.js","sourceRoot":"","sources":["../../../src/main/node/plugin-service.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,+CAA+C;AAC/C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAGhF,6BAA6B;AAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC/B,sDAAsD;AAEtD,4DAAiF;AACjF,iEAAqE;AACrE,+FAA4F;AAG5F,uFAAmF;AACnF,+FAA0F;AAGnF,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAA3B;QAIO,oBAAe,GAAY,KAAK,CAAC;IAkE/C,CAAC;IAzDa,IAAI;QACV,MAAM,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,sCAAsC,uBAAuB,aAAa,CAAC,CAAC;QACxF,IAAI,CAAC,6BAA6B,GAAG,IAAI,MAAM,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;IAClF,CAAC;IAED,SAAS,CAAC,GAAwB;QAC9B,MAAM,UAAU,GAAG,OAAO,EAAE,CAAC;QAC7B,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACpH,IAAI,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,EAAE,CAAC;YACtC,kGAAkG;YAClG,6GAA6G;YAC7G,wDAAwD;YACxD,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACJ,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,EAAE,UAAU,CAAC,CAAC,CAAC;QACnE,CAAC;IACL,CAAC;IAED,cAAc,CAAC,OAA6B;QACxC,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAClD,IAAI,IAAwB,CAAC;YAC7B,IAAI,CAAC;gBACD,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;YAChD,CAAC;YAAC,MAAM,CAAC;gBACL,IAAI,GAAG,SAAS,CAAC;YACrB,CAAC;YACD,IAAI,IAAI,IAAI,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxD,iDAAiD;gBACjD,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAES,8BAA8B;QACpC,IAAI,eAAe,CAAC;QACpB,IAAI,yBAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;YAC5B,eAAe,GAAG,0CAAuB,CAAC,cAAc,CAAC;QAC7D,CAAC;aAAM,CAAC;YACJ,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,0CAAuB,CAAC,OAAO,CAAC,IAAI,0CAAuB,CAAC,cAAc,CAAC;QAC7G,CAAC;QACD,IAAI,eAAe,KAAK,cAAc,EAAE,CAAC;YACrC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAChC,CAAC;QACD,OAAO,eAAe,CAAC;IAC3B,CAAC;IAED;;OAEG;IACO,uBAAuB;QAC7B,OAAO,IAAI,IAAI,CAAC,8BAA8B,EAAE;aAC3C,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;aACrB,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;aACzB,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC;IAC1C,CAAC;CACJ,CAAA;AAtEY,sDAAqB;AAOX;IADlB,IAAA,kBAAM,EAAC,wCAAkB,CAAC;sCACY,wCAAkB;iEAAC;AAGvC;IADlB,IAAA,kBAAM,EAAC,6CAAoB,CAAC;sCACK,6CAAoB;4DAAC;AAG7C;IADT,IAAA,yBAAa,GAAE;;;;iDAKf;gCAjBQ,qBAAqB;IADjC,IAAA,sBAAU,GAAE;GACA,qBAAqB,CAsEjC"}
package/package.json CHANGED
@@ -1,39 +1,39 @@
1
1
  {
2
2
  "name": "@theia/plugin-ext",
3
- "version": "1.74.0-next.17+3351cf136",
3
+ "version": "1.74.0-next.29+5ef180bee",
4
4
  "description": "Theia - Plugin Extension",
5
5
  "main": "lib/common/index.js",
6
6
  "typings": "lib/common/index.d.ts",
7
7
  "dependencies": {
8
- "@theia/ai-core": "1.74.0-next.17+3351cf136",
9
- "@theia/ai-mcp": "1.74.0-next.17+3351cf136",
10
- "@theia/bulk-edit": "1.74.0-next.17+3351cf136",
11
- "@theia/callhierarchy": "1.74.0-next.17+3351cf136",
12
- "@theia/console": "1.74.0-next.17+3351cf136",
13
- "@theia/core": "1.74.0-next.17+3351cf136",
14
- "@theia/debug": "1.74.0-next.17+3351cf136",
15
- "@theia/editor": "1.74.0-next.17+3351cf136",
16
- "@theia/editor-preview": "1.74.0-next.17+3351cf136",
17
- "@theia/file-search": "1.74.0-next.17+3351cf136",
18
- "@theia/filesystem": "1.74.0-next.17+3351cf136",
19
- "@theia/markers": "1.74.0-next.17+3351cf136",
20
- "@theia/messages": "1.74.0-next.17+3351cf136",
21
- "@theia/monaco": "1.74.0-next.17+3351cf136",
8
+ "@theia/ai-core": "1.74.0-next.29+5ef180bee",
9
+ "@theia/ai-mcp": "1.74.0-next.29+5ef180bee",
10
+ "@theia/bulk-edit": "1.74.0-next.29+5ef180bee",
11
+ "@theia/callhierarchy": "1.74.0-next.29+5ef180bee",
12
+ "@theia/console": "1.74.0-next.29+5ef180bee",
13
+ "@theia/core": "1.74.0-next.29+5ef180bee",
14
+ "@theia/debug": "1.74.0-next.29+5ef180bee",
15
+ "@theia/editor": "1.74.0-next.29+5ef180bee",
16
+ "@theia/editor-preview": "1.74.0-next.29+5ef180bee",
17
+ "@theia/file-search": "1.74.0-next.29+5ef180bee",
18
+ "@theia/filesystem": "1.74.0-next.29+5ef180bee",
19
+ "@theia/markers": "1.74.0-next.29+5ef180bee",
20
+ "@theia/messages": "1.74.0-next.29+5ef180bee",
21
+ "@theia/monaco": "1.74.0-next.29+5ef180bee",
22
22
  "@theia/monaco-editor-core": "1.108.201",
23
- "@theia/navigator": "1.74.0-next.17+3351cf136",
24
- "@theia/notebook": "1.74.0-next.17+3351cf136",
25
- "@theia/output": "1.74.0-next.17+3351cf136",
26
- "@theia/plugin": "1.74.0-next.17+3351cf136",
27
- "@theia/preferences": "1.74.0-next.17+3351cf136",
28
- "@theia/scm": "1.74.0-next.17+3351cf136",
29
- "@theia/search-in-workspace": "1.74.0-next.17+3351cf136",
30
- "@theia/task": "1.74.0-next.17+3351cf136",
31
- "@theia/terminal": "1.74.0-next.17+3351cf136",
32
- "@theia/test": "1.74.0-next.17+3351cf136",
33
- "@theia/timeline": "1.74.0-next.17+3351cf136",
34
- "@theia/typehierarchy": "1.74.0-next.17+3351cf136",
35
- "@theia/variable-resolver": "1.74.0-next.17+3351cf136",
36
- "@theia/workspace": "1.74.0-next.17+3351cf136",
23
+ "@theia/navigator": "1.74.0-next.29+5ef180bee",
24
+ "@theia/notebook": "1.74.0-next.29+5ef180bee",
25
+ "@theia/output": "1.74.0-next.29+5ef180bee",
26
+ "@theia/plugin": "1.74.0-next.29+5ef180bee",
27
+ "@theia/preferences": "1.74.0-next.29+5ef180bee",
28
+ "@theia/scm": "1.74.0-next.29+5ef180bee",
29
+ "@theia/search-in-workspace": "1.74.0-next.29+5ef180bee",
30
+ "@theia/task": "1.74.0-next.29+5ef180bee",
31
+ "@theia/terminal": "1.74.0-next.29+5ef180bee",
32
+ "@theia/test": "1.74.0-next.29+5ef180bee",
33
+ "@theia/timeline": "1.74.0-next.29+5ef180bee",
34
+ "@theia/typehierarchy": "1.74.0-next.29+5ef180bee",
35
+ "@theia/variable-resolver": "1.74.0-next.29+5ef180bee",
36
+ "@theia/workspace": "1.74.0-next.29+5ef180bee",
37
37
  "@types/mime": "^2.0.3",
38
38
  "@vscode/debugprotocol": "^1.68.0",
39
39
  "@vscode/proxy-agent": "^0.13.2",
@@ -47,7 +47,7 @@
47
47
  "macaddress": "^0.5.4",
48
48
  "mime": "^2.6.0",
49
49
  "node-pty": "1.2.0-beta.12",
50
- "semver": "^7.8.1",
50
+ "semver": "^7.8.5",
51
51
  "tslib": "^2.8.1",
52
52
  "vhost": "^3.0.2",
53
53
  "vscode-textmate": "^9.3.2"
@@ -98,5 +98,5 @@
98
98
  "nyc": {
99
99
  "extends": "../../configs/nyc.json"
100
100
  },
101
- "gitHead": "3351cf1363eb15fad7088cfc9e6857377baf0acc"
101
+ "gitHead": "5ef180bee6397858bc244d20ca2f35fb1fa360ac"
102
102
  }
@@ -0,0 +1,41 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2026 EclipseSource and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { expect } from 'chai';
18
+ import { HttpPluginDeployerResolver } from './plugin-http-resolver';
19
+ import { PluginDeployerResolverContext } from '../../common';
20
+
21
+ describe('HttpPluginDeployerResolver', () => {
22
+
23
+ function createContext(originId: string): PluginDeployerResolverContext {
24
+ return {
25
+ getOriginId: () => originId
26
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
+ } as any as PluginDeployerResolverContext;
28
+ }
29
+
30
+ it('should reject a malformed link URI', async () => {
31
+ const resolver = new HttpPluginDeployerResolver();
32
+ let error: Error | undefined;
33
+ try {
34
+ await resolver.resolve(createContext(':::not a url'));
35
+ } catch (e) {
36
+ error = e as Error;
37
+ }
38
+ expect(error).to.be.an.instanceOf(Error);
39
+ expect(error!.message).to.contain('invalid link URI');
40
+ });
41
+ });
@@ -19,7 +19,6 @@ import { inject, injectable } from '@theia/core/shared/inversify';
19
19
  import { Deferred } from '@theia/core/lib/common/promise-util';
20
20
  import { promises as fs } from 'fs';
21
21
  import * as path from 'path';
22
- import * as url from 'url';
23
22
  import { PluginDeployerResolver, PluginDeployerResolverContext } from '../../common';
24
23
  import { getTempDirPathAsync } from './temp-dir-util';
25
24
 
@@ -56,8 +55,10 @@ export class HttpPluginDeployerResolver implements PluginDeployerResolver {
56
55
  // download the file
57
56
  // keep filename of the url
58
57
  const urlPath = pluginResolverContext.getOriginId();
59
- const link = url.parse(urlPath);
60
- if (!link.pathname) {
58
+ let link: URL;
59
+ try {
60
+ link = new URL(urlPath);
61
+ } catch {
61
62
  throw new Error('invalid link URI' + urlPath);
62
63
  }
63
64
 
@@ -16,7 +16,6 @@
16
16
 
17
17
  import * as http from 'http';
18
18
  import * as path from 'path';
19
- import * as url from 'url';
20
19
  const vhost = require('vhost');
21
20
  import * as express from '@theia/core/shared/express';
22
21
  import { BackendApplicationContribution } from '@theia/core/lib/node/backend-application';
@@ -63,8 +62,13 @@ export class PluginApiContribution implements BackendApplicationContribution, Ws
63
62
 
64
63
  allowWsUpgrade(request: http.IncomingMessage): MaybePromise<boolean> {
65
64
  if (request.headers.origin && !this.serveSameOrigin) {
66
- const origin = url.parse(request.headers.origin);
67
- if (origin.host && this.webviewExternalEndpointRegExp.test(origin.host)) {
65
+ let host: string | undefined;
66
+ try {
67
+ host = new URL(request.headers.origin).host;
68
+ } catch {
69
+ host = undefined;
70
+ }
71
+ if (host && this.webviewExternalEndpointRegExp.test(host)) {
68
72
  // If the origin comes from the WebViews, refuse:
69
73
  return false;
70
74
  }