mirror of
https://github.com/zulip/zulip-desktop.git
synced 2025-11-17 12:21:39 +00:00
proxy: Add proxy details in request module parameters.
This commit adds proxy details to request module paramters from the proxyRules so that the request module can use these rules while sending a request. In case of no system proxy, set environment variable NO_PROXY to handle all links. Fixes: #534.
This commit is contained in:
committed by
Akash Nimare
parent
89c35cb1d4
commit
9ba279213c
@@ -4,6 +4,7 @@ const { Notification } = require('electron');
|
|||||||
const request = require('request');
|
const request = require('request');
|
||||||
const semver = require('semver');
|
const semver = require('semver');
|
||||||
const ConfigUtil = require('../renderer/js/utils/config-util');
|
const ConfigUtil = require('../renderer/js/utils/config-util');
|
||||||
|
const ProxyUtil = require('../renderer/js/utils/proxy-util');
|
||||||
const LinuxUpdateUtil = require('../renderer/js/utils/linux-update-util');
|
const LinuxUpdateUtil = require('../renderer/js/utils/linux-update-util');
|
||||||
const Logger = require('../renderer/js/utils/logger-util');
|
const Logger = require('../renderer/js/utils/logger-util');
|
||||||
|
|
||||||
@@ -15,10 +16,12 @@ const logger = new Logger({
|
|||||||
function linuxUpdateNotification() {
|
function linuxUpdateNotification() {
|
||||||
let url = 'https://api.github.com/repos/zulip/zulip-electron/releases';
|
let url = 'https://api.github.com/repos/zulip/zulip-electron/releases';
|
||||||
url = ConfigUtil.getConfigItem('betaUpdate') ? url : url + '/latest';
|
url = ConfigUtil.getConfigItem('betaUpdate') ? url : url + '/latest';
|
||||||
|
const proxyEnabled = ConfigUtil.getConfigItem('useManualProxy') || ConfigUtil.getConfigItem('useSystemProxy');
|
||||||
|
|
||||||
const options = {
|
const options = {
|
||||||
url,
|
url,
|
||||||
headers: {'User-Agent': 'request'}
|
headers: {'User-Agent': 'request'},
|
||||||
|
proxy: proxyEnabled ? ProxyUtil.getProxy(url) : ''
|
||||||
};
|
};
|
||||||
|
|
||||||
request(options, (error, response, body) => {
|
request(options, (error, response, body) => {
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ const escape = require('escape-html');
|
|||||||
const Logger = require('./logger-util');
|
const Logger = require('./logger-util');
|
||||||
|
|
||||||
const CertificateUtil = require(__dirname + '/certificate-util.js');
|
const CertificateUtil = require(__dirname + '/certificate-util.js');
|
||||||
|
const ProxyUtil = require(__dirname + '/proxy-util.js');
|
||||||
|
const ConfigUtil = require(__dirname + '/config-util.js');
|
||||||
|
|
||||||
const logger = new Logger({
|
const logger = new Logger({
|
||||||
file: `domain-util.log`,
|
file: `domain-util.log`,
|
||||||
@@ -119,8 +121,16 @@ class DomainUtil {
|
|||||||
logger.warn('Error while trying to get certificate: ' + err);
|
logger.warn('Error while trying to get certificate: ' + err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const proxyEnabled = ConfigUtil.getConfigItem('useManualProxy') || ConfigUtil.getConfigItem('useSystemProxy');
|
||||||
|
|
||||||
// If certificate for the domain exists add it as a ca key in the request's parameter else consider only domain as the parameter for request
|
// If certificate for the domain exists add it as a ca key in the request's parameter else consider only domain as the parameter for request
|
||||||
const checkDomain = (certificateLocation) ? ({url: domain + '/static/audio/zulip.ogg', ca: certificateLocation}) : domain + '/static/audio/zulip.ogg';
|
// Add proxy as a parameter if it sbeing used.
|
||||||
|
const checkDomain = {
|
||||||
|
url: domain + '/static/audio/zulip.ogg',
|
||||||
|
ca: (certificateLocation) ? certificateLocation : '',
|
||||||
|
proxy: proxyEnabled ? ProxyUtil.getProxy(domain) : ''
|
||||||
|
};
|
||||||
|
|
||||||
const serverConf = {
|
const serverConf = {
|
||||||
icon: defaultIconUrl,
|
icon: defaultIconUrl,
|
||||||
@@ -193,9 +203,13 @@ class DomainUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getServerSettings(domain) {
|
getServerSettings(domain) {
|
||||||
const serverSettingsUrl = domain + '/api/v1/server_settings';
|
const proxyEnabled = ConfigUtil.getConfigItem('useManualProxy') || ConfigUtil.getConfigItem('useSystemProxy');
|
||||||
|
const serverSettingsOptions = {
|
||||||
|
url: domain + '/api/v1/server_settings',
|
||||||
|
proxy: proxyEnabled ? ProxyUtil.getProxy(domain) : ''
|
||||||
|
};
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
request(serverSettingsUrl, (error, response) => {
|
request(serverSettingsOptions, (error, response) => {
|
||||||
if (!error && response.statusCode === 200) {
|
if (!error && response.statusCode === 200) {
|
||||||
const data = JSON.parse(response.body);
|
const data = JSON.parse(response.body);
|
||||||
if (data.hasOwnProperty('realm_icon') && data.realm_icon) {
|
if (data.hasOwnProperty('realm_icon') && data.realm_icon) {
|
||||||
@@ -215,12 +229,17 @@ class DomainUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
saveServerIcon(url) {
|
saveServerIcon(url) {
|
||||||
|
const proxyEnabled = ConfigUtil.getConfigItem('useManualProxy') || ConfigUtil.getConfigItem('useSystemProxy');
|
||||||
|
const serverIconOptions = {
|
||||||
|
url,
|
||||||
|
proxy: proxyEnabled ? ProxyUtil.getProxy(url) : ''
|
||||||
|
};
|
||||||
// The save will always succeed. If url is invalid, downgrade to default icon.
|
// The save will always succeed. If url is invalid, downgrade to default icon.
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
const filePath = this.generateFilePath(url);
|
const filePath = this.generateFilePath(url);
|
||||||
const file = fs.createWriteStream(filePath);
|
const file = fs.createWriteStream(filePath);
|
||||||
try {
|
try {
|
||||||
request(url).on('response', response => {
|
request(serverIconOptions).on('response', response => {
|
||||||
response.on('error', err => {
|
response.on('error', err => {
|
||||||
logger.log('Could not get server icon.');
|
logger.log('Could not get server icon.');
|
||||||
logger.log(err);
|
logger.log(err);
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
const url = require('url');
|
||||||
const ConfigUtil = require('./config-util.js');
|
const ConfigUtil = require('./config-util.js');
|
||||||
|
|
||||||
let instance = null;
|
let instance = null;
|
||||||
@@ -15,6 +16,39 @@ class ProxyUtil {
|
|||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Return proxy to be used for a particular uri, to be used for request
|
||||||
|
getProxy(uri) {
|
||||||
|
uri = url.parse(uri);
|
||||||
|
const proxyRules = ConfigUtil.getConfigItem('proxyRules', '').split(';');
|
||||||
|
// If SPS is on and system uses no proxy then request should not try to use proxy from
|
||||||
|
// environment. NO_PROXY = '*' makes request ignore all environment proxy variables.
|
||||||
|
if (proxyRules[0] === '') {
|
||||||
|
process.env.NO_PROXY = '*';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const proxyRule = {};
|
||||||
|
if (uri.protocol === 'http:') {
|
||||||
|
proxyRules.forEach(proxy => {
|
||||||
|
if (proxy.includes('http=')) {
|
||||||
|
proxyRule.hostname = proxy.split('http=')[1].trim().split(':')[0];
|
||||||
|
proxyRule.port = proxy.split('http=')[1].trim().split(':')[1];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return proxyRule;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (uri.protocol === 'https:') {
|
||||||
|
proxyRules.forEach(proxy => {
|
||||||
|
if (proxy.includes('https=')) {
|
||||||
|
proxyRule.hostname = proxy.split('https=')[1].trim().split(':')[0];
|
||||||
|
proxyRule.port = proxy.split('https=')[1].trim().split(':')[1];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return proxyRule;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
resolveSystemProxy(mainWindow) {
|
resolveSystemProxy(mainWindow) {
|
||||||
const page = mainWindow.webContents;
|
const page = mainWindow.webContents;
|
||||||
const ses = page.session;
|
const ses = page.session;
|
||||||
|
|||||||
Reference in New Issue
Block a user