mirror of
				https://github.com/zulip/zulip-desktop.git
				synced 2025-11-04 05:53:21 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			75 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import * as ConfigUtil from './config-util';
 | 
						|
 | 
						|
export interface ProxyRule {
 | 
						|
	hostname?: string;
 | 
						|
	port?: number;
 | 
						|
}
 | 
						|
 | 
						|
// TODO: Refactor to async function
 | 
						|
export async function resolveSystemProxy(mainWindow: Electron.BrowserWindow): Promise<void> {
 | 
						|
	const page = mainWindow.webContents;
 | 
						|
	const ses = page.session;
 | 
						|
	const resolveProxyUrl = 'www.example.com';
 | 
						|
 | 
						|
	// Check HTTP Proxy
 | 
						|
	const httpProxy = (async () => {
 | 
						|
		const proxy = await ses.resolveProxy('http://' + resolveProxyUrl);
 | 
						|
		let httpString = '';
 | 
						|
		if (proxy !== 'DIRECT' && (proxy.includes('PROXY') || proxy.includes('HTTPS'))) {
 | 
						|
			// In case of proxy HTTPS url:port, windows gives first word as HTTPS while linux gives PROXY
 | 
						|
			// for all other HTTP or direct url:port both uses PROXY
 | 
						|
			httpString = 'http=' + proxy.split('PROXY')[1] + ';';
 | 
						|
		}
 | 
						|
 | 
						|
		return httpString;
 | 
						|
	})();
 | 
						|
	// Check HTTPS Proxy
 | 
						|
	const httpsProxy = (async () => {
 | 
						|
		const proxy = await ses.resolveProxy('https://' + resolveProxyUrl);
 | 
						|
		let httpsString = '';
 | 
						|
		if ((proxy !== 'DIRECT' || proxy.includes('HTTPS')) && (proxy.includes('PROXY') || proxy.includes('HTTPS'))) {
 | 
						|
			// In case of proxy HTTPS url:port, windows gives first word as HTTPS while linux gives PROXY
 | 
						|
			// for all other HTTP or direct url:port both uses PROXY
 | 
						|
			httpsString += 'https=' + proxy.split('PROXY')[1] + ';';
 | 
						|
		}
 | 
						|
 | 
						|
		return httpsString;
 | 
						|
	})();
 | 
						|
 | 
						|
	// Check FTP Proxy
 | 
						|
	const ftpProxy = (async () => {
 | 
						|
		const proxy = await ses.resolveProxy('ftp://' + resolveProxyUrl);
 | 
						|
		let ftpString = '';
 | 
						|
		if (proxy !== 'DIRECT' && proxy.includes('PROXY')) {
 | 
						|
			ftpString += 'ftp=' + proxy.split('PROXY')[1] + ';';
 | 
						|
		}
 | 
						|
 | 
						|
		return ftpString;
 | 
						|
	})();
 | 
						|
 | 
						|
	// Check SOCKS Proxy
 | 
						|
	const socksProxy = (async () => {
 | 
						|
		const proxy = await ses.resolveProxy('socks4://' + resolveProxyUrl);
 | 
						|
		let socksString = '';
 | 
						|
		if (proxy !== 'DIRECT') {
 | 
						|
			if (proxy.includes('SOCKS5')) {
 | 
						|
				socksString += 'socks=' + proxy.split('SOCKS5')[1] + ';';
 | 
						|
			} else if (proxy.includes('SOCKS4')) {
 | 
						|
				socksString += 'socks=' + proxy.split('SOCKS4')[1] + ';';
 | 
						|
			} else if (proxy.includes('PROXY')) {
 | 
						|
				socksString += 'socks=' + proxy.split('PROXY')[1] + ';';
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		return socksString;
 | 
						|
	})();
 | 
						|
 | 
						|
	const values = await Promise.all([httpProxy, httpsProxy, ftpProxy, socksProxy]);
 | 
						|
	const proxyString = values.join('');
 | 
						|
	ConfigUtil.setConfigItem('systemProxyRules', proxyString);
 | 
						|
	const useSystemProxy = ConfigUtil.getConfigItem('useSystemProxy');
 | 
						|
	if (useSystemProxy) {
 | 
						|
		ConfigUtil.setConfigItem('proxyRules', proxyString);
 | 
						|
	}
 | 
						|
}
 |