add a global proxy option that will apply to all account that don't have a proxy configured. Fixes #7023
This commit is contained in:
parent
44064c745d
commit
8787adf725
4 changed files with 90 additions and 47 deletions
|
@ -290,6 +290,7 @@ class Config:
|
||||||
'use_stun_server': [opt_bool, False, _('If True, Gajim will try to use a STUN server when using jingle. The one in "stun_server" option, or the one given by the jabber server.')],
|
'use_stun_server': [opt_bool, False, _('If True, Gajim will try to use a STUN server when using jingle. The one in "stun_server" option, or the one given by the jabber server.')],
|
||||||
'stun_server': [opt_str, '', _('STUN server to use when using jingle')],
|
'stun_server': [opt_str, '', _('STUN server to use when using jingle')],
|
||||||
'show_affiliation_in_groupchat': [opt_bool, True, _('If True, Gajim will show affiliation of groupchat occupants by adding a colored square to the status icon')],
|
'show_affiliation_in_groupchat': [opt_bool, True, _('If True, Gajim will show affiliation of groupchat occupants by adding a colored square to the status icon')],
|
||||||
|
'global_proxy': [opt_str, '', _('Proxy used for all outgoing connections if the account does not have a specific proxy configured')],
|
||||||
}
|
}
|
||||||
|
|
||||||
__options_per_key = {
|
__options_per_key = {
|
||||||
|
|
|
@ -981,7 +981,7 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
if weightsum >= rndint:
|
if weightsum >= rndint:
|
||||||
return host
|
return host
|
||||||
|
|
||||||
def connect(self, data = None):
|
def connect(self, data=None):
|
||||||
"""
|
"""
|
||||||
Start a connection to the Jabber server
|
Start a connection to the Jabber server
|
||||||
|
|
||||||
|
@ -998,11 +998,19 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
self.try_connecting_for_foo_secs = gajim.config.get_per('accounts',
|
self.try_connecting_for_foo_secs = gajim.config.get_per('accounts',
|
||||||
self.name, 'try_connecting_for_foo_secs')
|
self.name, 'try_connecting_for_foo_secs')
|
||||||
use_custom = False
|
use_custom = False
|
||||||
|
proxy = helpers.get_proxy_info(self.name)
|
||||||
|
|
||||||
elif data:
|
elif data:
|
||||||
hostname = data['hostname']
|
hostname = data['hostname']
|
||||||
self.try_connecting_for_foo_secs = 45
|
self.try_connecting_for_foo_secs = 45
|
||||||
p = data['proxy']
|
p = data['proxy']
|
||||||
|
if p and p in gajim.config.get_per('proxies'):
|
||||||
|
proxy = {}
|
||||||
|
proxyptr = gajim.config.get_per('proxies', p)
|
||||||
|
for key in proxyptr.keys():
|
||||||
|
proxy[key] = proxyptr[key][1]
|
||||||
|
else:
|
||||||
|
proxy = None
|
||||||
use_srv = True
|
use_srv = True
|
||||||
use_custom = data['use_custom_host']
|
use_custom = data['use_custom_host']
|
||||||
if use_custom:
|
if use_custom:
|
||||||
|
@ -1013,7 +1021,7 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
usessl = gajim.config.get_per('accounts', self.name, 'usessl')
|
usessl = gajim.config.get_per('accounts', self.name, 'usessl')
|
||||||
self.try_connecting_for_foo_secs = gajim.config.get_per('accounts',
|
self.try_connecting_for_foo_secs = gajim.config.get_per('accounts',
|
||||||
self.name, 'try_connecting_for_foo_secs')
|
self.name, 'try_connecting_for_foo_secs')
|
||||||
p = gajim.config.get_per('accounts', self.name, 'proxy')
|
proxy = helpers.get_proxy_info(self.name)
|
||||||
use_srv = gajim.config.get_per('accounts', self.name, 'use_srv')
|
use_srv = gajim.config.get_per('accounts', self.name, 'use_srv')
|
||||||
use_custom = gajim.config.get_per('accounts', self.name,
|
use_custom = gajim.config.get_per('accounts', self.name,
|
||||||
'use_custom_host')
|
'use_custom_host')
|
||||||
|
@ -1022,52 +1030,10 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
|
|
||||||
# create connection if it doesn't already exist
|
# create connection if it doesn't already exist
|
||||||
self.connected = 1
|
self.connected = 1
|
||||||
if p and p in gajim.config.get_per('proxies'):
|
|
||||||
proxy = {}
|
|
||||||
proxyptr = gajim.config.get_per('proxies', p)
|
|
||||||
for key in proxyptr.keys():
|
|
||||||
proxy[key] = proxyptr[key][1]
|
|
||||||
|
|
||||||
elif gajim.config.get_per('accounts', self.name, 'use_env_http_proxy'):
|
|
||||||
try:
|
|
||||||
try:
|
|
||||||
env_http_proxy = os.environ['HTTP_PROXY']
|
|
||||||
except Exception:
|
|
||||||
env_http_proxy = os.environ['http_proxy']
|
|
||||||
env_http_proxy = env_http_proxy.strip('"')
|
|
||||||
# Dispose of the http:// prefix
|
|
||||||
env_http_proxy = env_http_proxy.split('://')
|
|
||||||
env_http_proxy = env_http_proxy[len(env_http_proxy)-1]
|
|
||||||
env_http_proxy = env_http_proxy.split('@')
|
|
||||||
|
|
||||||
if len(env_http_proxy) == 2:
|
|
||||||
login = env_http_proxy[0].split(':')
|
|
||||||
addr = env_http_proxy[1].split(':')
|
|
||||||
else:
|
|
||||||
login = ['', '']
|
|
||||||
addr = env_http_proxy[0].split(':')
|
|
||||||
|
|
||||||
proxy = {'host': addr[0], 'type' : u'http', 'user':login[0]}
|
|
||||||
|
|
||||||
if len(addr) == 2:
|
|
||||||
proxy['port'] = addr[1]
|
|
||||||
else:
|
|
||||||
proxy['port'] = 3128
|
|
||||||
|
|
||||||
if len(login) == 2:
|
|
||||||
proxy['pass'] = login[1]
|
|
||||||
proxy['useauth'] = True
|
|
||||||
else:
|
|
||||||
proxy['pass'] = u''
|
|
||||||
|
|
||||||
except Exception:
|
|
||||||
proxy = None
|
|
||||||
else:
|
|
||||||
proxy = None
|
|
||||||
h = hostname
|
h = hostname
|
||||||
p = 5222
|
p = 5222
|
||||||
ssl_p = 5223
|
ssl_p = 5223
|
||||||
# use_srv = False # wants ssl? disable srv lookup
|
|
||||||
if use_custom:
|
if use_custom:
|
||||||
h = custom_h
|
h = custom_h
|
||||||
p = custom_p
|
p = custom_p
|
||||||
|
@ -1082,8 +1048,8 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
if use_srv:
|
if use_srv:
|
||||||
# add request for srv query to the resolve, on result '_on_resolve'
|
# add request for srv query to the resolve, on result '_on_resolve'
|
||||||
# will be called
|
# will be called
|
||||||
gajim.resolver.resolve('_xmpp-client._tcp.' + helpers.idn_to_ascii(h),
|
gajim.resolver.resolve('_xmpp-client._tcp.' + helpers.idn_to_ascii(
|
||||||
self._on_resolve)
|
h), self._on_resolve)
|
||||||
else:
|
else:
|
||||||
self._on_resolve('', [])
|
self._on_resolve('', [])
|
||||||
|
|
||||||
|
@ -1094,7 +1060,8 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
# Add ssl port
|
# Add ssl port
|
||||||
ssl_p = 5223
|
ssl_p = 5223
|
||||||
if gajim.config.get_per('accounts', self.name, 'use_custom_host'):
|
if gajim.config.get_per('accounts', self.name, 'use_custom_host'):
|
||||||
ssl_p = gajim.config.get_per('accounts', self.name, 'custom_port')
|
ssl_p = gajim.config.get_per('accounts', self.name,
|
||||||
|
'custom_port')
|
||||||
for i in self._hosts:
|
for i in self._hosts:
|
||||||
i['ssl_port'] = ssl_p
|
i['ssl_port'] = ssl_p
|
||||||
self._connect_to_next_host()
|
self._connect_to_next_host()
|
||||||
|
|
|
@ -1381,3 +1381,48 @@ def replace_dataform_media(form, stanza):
|
||||||
uri.setData(data.getData())
|
uri.setData(data.getData())
|
||||||
found = True
|
found = True
|
||||||
return found
|
return found
|
||||||
|
|
||||||
|
def get_proxy_info(account):
|
||||||
|
p = gajim.config.get_per('accounts', account, 'proxy')
|
||||||
|
if not p:
|
||||||
|
if gajim.config.get_per('accounts', account, 'use_env_http_proxy'):
|
||||||
|
try:
|
||||||
|
try:
|
||||||
|
env_http_proxy = os.environ['HTTP_PROXY']
|
||||||
|
except Exception:
|
||||||
|
env_http_proxy = os.environ['http_proxy']
|
||||||
|
env_http_proxy = env_http_proxy.strip('"')
|
||||||
|
# Dispose of the http:// prefix
|
||||||
|
env_http_proxy = env_http_proxy.split('://')[-1]
|
||||||
|
env_http_proxy = env_http_proxy.split('@')
|
||||||
|
|
||||||
|
if len(env_http_proxy) == 2:
|
||||||
|
login = env_http_proxy[0].split(':')
|
||||||
|
addr = env_http_proxy[1].split(':')
|
||||||
|
else:
|
||||||
|
login = ['', '']
|
||||||
|
addr = env_http_proxy[0].split(':')
|
||||||
|
|
||||||
|
proxy = {'host': addr[0], 'type' : u'http', 'user':login[0]}
|
||||||
|
|
||||||
|
if len(addr) == 2:
|
||||||
|
proxy['port'] = addr[1]
|
||||||
|
else:
|
||||||
|
proxy['port'] = 3128
|
||||||
|
|
||||||
|
if len(login) == 2:
|
||||||
|
proxy['pass'] = login[1]
|
||||||
|
proxy['useauth'] = True
|
||||||
|
else:
|
||||||
|
proxy['pass'] = u''
|
||||||
|
return proxy
|
||||||
|
|
||||||
|
except Exception:
|
||||||
|
proxy = None
|
||||||
|
p = gajim.config.get('global_proxy')
|
||||||
|
if p:
|
||||||
|
proxy = {}
|
||||||
|
proxyptr = gajim.config.get_per('proxies', p)
|
||||||
|
for key in proxyptr.keys():
|
||||||
|
proxy[key] = proxyptr[key][1]
|
||||||
|
return proxy
|
|
@ -551,6 +551,8 @@ class PreferencesWindow:
|
||||||
else:
|
else:
|
||||||
w.set_active(st)
|
w.set_active(st)
|
||||||
|
|
||||||
|
self.update_proxy_list()
|
||||||
|
|
||||||
# check if gajm is default
|
# check if gajm is default
|
||||||
st = gajim.config.get('check_if_gajim_is_default')
|
st = gajim.config.get('check_if_gajim_is_default')
|
||||||
self.xml.get_object('check_default_client_checkbutton').set_active(st)
|
self.xml.get_object('check_default_client_checkbutton').set_active(st)
|
||||||
|
@ -1256,6 +1258,34 @@ class PreferencesWindow:
|
||||||
if event.keyval == gtk.keysyms.Delete:
|
if event.keyval == gtk.keysyms.Delete:
|
||||||
self.on_delete_msg_button_clicked(widget)
|
self.on_delete_msg_button_clicked(widget)
|
||||||
|
|
||||||
|
def on_proxies_combobox_changed(self, widget):
|
||||||
|
active = widget.get_active()
|
||||||
|
proxy = widget.get_model()[active][0].decode('utf-8')
|
||||||
|
if proxy == _('None'):
|
||||||
|
proxy = ''
|
||||||
|
|
||||||
|
gajim.config.set('global_proxy', proxy)
|
||||||
|
|
||||||
|
def on_manage_proxies_button_clicked(self, widget):
|
||||||
|
if 'manage_proxies' in gajim.interface.instances:
|
||||||
|
gajim.interface.instances['manage_proxies'].window.present()
|
||||||
|
else:
|
||||||
|
gajim.interface.instances['manage_proxies'] = ManageProxiesWindow()
|
||||||
|
|
||||||
|
def update_proxy_list(self):
|
||||||
|
our_proxy = gajim.config.get('global_proxy')
|
||||||
|
if not our_proxy:
|
||||||
|
our_proxy = _('None')
|
||||||
|
proxy_combobox = self.xml.get_object('proxies_combobox')
|
||||||
|
model = proxy_combobox.get_model()
|
||||||
|
model.clear()
|
||||||
|
l = gajim.config.get_per('proxies')
|
||||||
|
l.insert(0, _('None'))
|
||||||
|
for i in xrange(len(l)):
|
||||||
|
model.append([l[i]])
|
||||||
|
if our_proxy == l[i]:
|
||||||
|
proxy_combobox.set_active(i)
|
||||||
|
|
||||||
def on_open_advanced_editor_button_clicked(self, widget, data = None):
|
def on_open_advanced_editor_button_clicked(self, widget, data = None):
|
||||||
if 'advanced_config' in gajim.interface.instances:
|
if 'advanced_config' in gajim.interface.instances:
|
||||||
gajim.interface.instances['advanced_config'].window.present()
|
gajim.interface.instances['advanced_config'].window.present()
|
||||||
|
|
Loading…
Add table
Reference in a new issue