mirror of
https://github.com/microsoft/vscode.git
synced 2026-07-07 07:16:41 +01:00
Load certificates in net.connect (#185098)
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
import * as http from 'http';
|
||||
import * as https from 'https';
|
||||
import * as tls from 'tls';
|
||||
import * as net from 'net';
|
||||
|
||||
import { IExtHostWorkspaceProvider } from 'vs/workbench/api/common/extHostWorkspace';
|
||||
import { ExtHostConfigProvider } from 'vs/workbench/api/common/extHostConfiguration';
|
||||
@@ -15,7 +16,7 @@ import { ExtHostExtensionService } from 'vs/workbench/api/node/extHostExtensionS
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
|
||||
import { LogLevel, createHttpPatch, createProxyResolver, createTlsPatch, ProxySupportSetting } from '@vscode/proxy-agent';
|
||||
import { LogLevel, createHttpPatch, createProxyResolver, createTlsPatch, ProxySupportSetting, ProxyAgentParams, createNetPatch } from '@vscode/proxy-agent';
|
||||
|
||||
export function connectProxyResolver(
|
||||
extHostWorkspace: IExtHostWorkspaceProvider,
|
||||
@@ -27,7 +28,7 @@ export function connectProxyResolver(
|
||||
) {
|
||||
const useHostProxy = initData.environment.useHostProxy;
|
||||
const doUseHostProxy = typeof useHostProxy === 'boolean' ? useHostProxy : !initData.remote.isRemote;
|
||||
const resolveProxy = createProxyResolver({
|
||||
const params: ProxyAgentParams = {
|
||||
resolveProxy: url => extHostWorkspace.resolveProxy(url),
|
||||
getHttpProxySetting: () => configProvider.getConfiguration('http').get('proxy'),
|
||||
log: (level, message, ...args) => {
|
||||
@@ -50,13 +51,19 @@ export function connectProxyResolver(
|
||||
// TODO @chrmarti Remove this from proxy agent
|
||||
proxyResolveTelemetry: () => { },
|
||||
useHostProxy: doUseHostProxy,
|
||||
useSystemCertificatesV2: certSettingV2(configProvider),
|
||||
addCertificates: [],
|
||||
env: process.env,
|
||||
};
|
||||
configProvider.onDidChangeConfiguration(e => {
|
||||
params.useSystemCertificatesV2 = certSettingV2(configProvider);
|
||||
});
|
||||
const lookup = createPatchedModules(configProvider, resolveProxy);
|
||||
const resolveProxy = createProxyResolver(params);
|
||||
const lookup = createPatchedModules(params, configProvider, resolveProxy);
|
||||
return configureModuleLoading(extensionService, lookup);
|
||||
}
|
||||
|
||||
function createPatchedModules(configProvider: ExtHostConfigProvider, resolveProxy: ReturnType<typeof createProxyResolver>) {
|
||||
function createPatchedModules(params: ProxyAgentParams, configProvider: ExtHostConfigProvider, resolveProxy: ReturnType<typeof createProxyResolver>) {
|
||||
const proxySetting = {
|
||||
config: configProvider.getConfiguration('http')
|
||||
.get<ProxySupportSetting>('proxySupport') || 'off'
|
||||
@@ -66,12 +73,10 @@ function createPatchedModules(configProvider: ExtHostConfigProvider, resolveProx
|
||||
.get<ProxySupportSetting>('proxySupport') || 'off';
|
||||
});
|
||||
const certSetting = {
|
||||
config: !!configProvider.getConfiguration('http')
|
||||
.get<boolean>('systemCertificates')
|
||||
config: certSettingV1(configProvider)
|
||||
};
|
||||
configProvider.onDidChangeConfiguration(e => {
|
||||
certSetting.config = !!configProvider.getConfiguration('http')
|
||||
.get<boolean>('systemCertificates');
|
||||
certSetting.config = certSettingV1(configProvider);
|
||||
});
|
||||
|
||||
return {
|
||||
@@ -89,10 +94,21 @@ function createPatchedModules(configProvider: ExtHostConfigProvider, resolveProx
|
||||
onRequest: Object.assign({}, https, createHttpPatch(https, resolveProxy, proxySetting, certSetting, true)),
|
||||
default: Object.assign(https, createHttpPatch(https, resolveProxy, proxySetting, certSetting, false)) // run last
|
||||
} as Record<string, typeof https>,
|
||||
tls: Object.assign(tls, createTlsPatch(tls))
|
||||
net: Object.assign(net, createNetPatch(params, net)),
|
||||
tls: Object.assign(tls, createTlsPatch(params, tls))
|
||||
};
|
||||
}
|
||||
|
||||
function certSettingV1(configProvider: ExtHostConfigProvider) {
|
||||
const http = configProvider.getConfiguration('http');
|
||||
return !http.get<boolean>('experimental.systemCertificatesV2') && !!http.get<boolean>('systemCertificates');
|
||||
}
|
||||
|
||||
function certSettingV2(configProvider: ExtHostConfigProvider) {
|
||||
const http = configProvider.getConfiguration('http');
|
||||
return !!http.get<boolean>('experimental.systemCertificatesV2') && !!http.get<boolean>('systemCertificates');
|
||||
}
|
||||
|
||||
const modulesCache = new Map<IExtensionDescription | undefined, { http?: typeof http; https?: typeof https }>();
|
||||
function configureModuleLoading(extensionService: ExtHostExtensionService, lookup: ReturnType<typeof createPatchedModules>): Promise<void> {
|
||||
return extensionService.getExtensionPathIndex()
|
||||
@@ -100,6 +116,10 @@ function configureModuleLoading(extensionService: ExtHostExtensionService, looku
|
||||
const node_module = <any>globalThis._VSCODE_NODE_MODULES.module;
|
||||
const original = node_module._load;
|
||||
node_module._load = function load(request: string, parent: { filename: string }, isMain: boolean) {
|
||||
if (request === 'net') {
|
||||
return lookup.net;
|
||||
}
|
||||
|
||||
if (request === 'tls') {
|
||||
return lookup.tls;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user