var child_process = require('child_process'); var networkTypes = ['Ethernet', 'Thunderbolt Ethernet', 'Wi-Fi']; function execSync(cmd) { var stdout, status = 0; try { stdout = child_process.execSync(cmd); } catch (err) { stdout = err.stdout; status = err.status; } return { stdout: stdout.toString(), status: status }; } /** * proxy for CentOs * ------------------------------------------------------------------------ * * file: ~/.bash_profile * * http_proxy=http://proxy_server_address:port * export no_proxy=localhost,127.0.0.1,192.168.0.34 * export http_proxy * ------------------------------------------------------------------------ */ /** * proxy for Ubuntu * ------------------------------------------------------------------------ * * file: /etc/environment * more info: http://askubuntu.com/questions/150210/how-do-i-set-systemwide-proxy-servers-in-xubuntu-lubuntu-or-ubuntu-studio * * http_proxy=http://proxy_server_address:port * export no_proxy=localhost,127.0.0.1,192.168.0.34 * export http_proxy * ------------------------------------------------------------------------ */ /** * ------------------------------------------------------------------------ * mac proxy manager * ------------------------------------------------------------------------ */ var macProxyManager = {}; macProxyManager.getNetworkType = function() { for (var i = 0; i < networkTypes.length; i++) { var type = networkTypes[i], result = execSync('networksetup -getwebproxy ' + type); if (result.status === 0) { macProxyManager.networkType = type; return type; } } throw new Error('Unknown network type'); }; macProxyManager.enableGlobalProxy = function(ip, port, proxyType) { if (!ip || !port) { console.log('failed to set global proxy server.\n ip and port are required.'); return; }; proxyType = proxyType || 'http'; var networkType = macProxyManager.networkType || macProxyManager.getNetworkType(); return /^http$/i.test(proxyType) ? // set http proxy execSync( 'networksetup -setwebproxy ${networkType} ${ip} ${port}' .replace("${networkType}", networkType) .replace("${ip}", ip) .replace("${port}", port)) : // set https proxy execSync('networksetup -setsecurewebproxy ${networkType} ${ip} ${port}' .replace("${networkType}", networkType) .replace("${ip}", ip) .replace("${port}", port)); }; macProxyManager.disableGlobalProxy = function(proxyType) { proxyType = proxyType || 'http'; var networkType = macProxyManager.networkType || macProxyManager.getNetworkType(); return /^http$/i.test(proxyType) ? // set http proxy execSync( 'networksetup -setwebproxystate ${networkType} off' .replace("${networkType}", networkType)) : // set https proxy execSync( 'networksetup -setsecurewebproxystate ${networkType} off' .replace("${networkType}", networkType)); }; macProxyManager.getProxyState = function() { var networkType = macProxyManager.networkType || macProxyManager.getNetworkType(); var result = execSync('networksetup -getwebproxy ${networkType}'.replace('${networkType}', networkType)); return result; }; /** * ------------------------------------------------------------------------ * windows proxy manager * * netsh does not alter the settings for IE * ------------------------------------------------------------------------ */ var winProxyManager = {}; winProxyManager.enableGlobalProxy = function(ip, port) { if (!ip && !port) { console.log('failed to set global proxy server.\n ip and port are required.'); return; }; return execSync( // set proxy 'reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyServer /t REG_SZ /d ${ip}:${port} /f & ' .replace("${ip}", ip) .replace("${port}", port) + // enable proxy 'reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f'); }; winProxyManager.disableGlobalProxy = function() { return execSync('reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f'); }; winProxyManager.getProxyState = function() { return ''; }; winProxyManager.getNetworkType = function() { return ''; }; module.exports = /^win/.test(process.platform) ? winProxyManager : macProxyManager;