1
# -*- coding: utf-8 -*-
3
# Copyright (c) 2010 - 2012 Detlev Offenbach <detlev@die-offenbachs.de>
7
Module implementing a network proxy factory.
13
from PyQt4.QtCore import QUrl
14
from PyQt4.QtGui import QMessageBox
15
from PyQt4.QtNetwork import QNetworkProxyFactory, QNetworkProxy, QNetworkProxyQuery
19
class E4NetworkProxyFactory(QNetworkProxyFactory):
21
Class implementing a network proxy factory.
27
QNetworkProxyFactory.__init__(self)
29
def queryProxy(self, query):
31
Public method to determine a proxy for a given query.
33
@param query reference to the query object (QNetworkProxyQuery)
34
@return list of proxies in order of preference (list of QNetworkProxy)
36
if query.queryType() == QNetworkProxyQuery.UrlRequest and \
37
query.protocolTag() in ["http", "https", "ftp"] and \
38
Preferences.getUI("UseProxy"):
39
if Preferences.getUI("UseSystemProxy"):
40
proxyList = QNetworkProxyFactory.systemProxyForQuery(query)
41
if sys.platform not in ["darwin", "nt"] and \
42
len(proxyList) == 1 and \
43
proxyList[0].type() == QNetworkProxy.NoProxy:
44
# try it the Python way
45
# scan the environment for variables named <scheme>_proxy
46
# scan over whole environment to make this case insensitive
47
for name, value in os.environ.items():
49
if value and name[-6:] == '_proxy' and \
50
name[:-6] == query.protocolTag().toLower():
52
if url.scheme() in ["http", "https"]:
53
proxyType = QNetworkProxy.HttpProxy
55
proxyType = QNetworkProxy.FtpCachingProxy
56
proxy = QNetworkProxy(proxyType, url.host(), url.port(),
57
url.userName(), url.password())
61
proxyList[0].setUser(Preferences.getUI("ProxyUser"))
62
proxyList[0].setPassword(Preferences.getUI("ProxyPassword"))
65
return [QNetworkProxy(QNetworkProxy.NoProxy)]
67
host = Preferences.getUI("ProxyHost")
69
QMessageBox.critical(None,
70
self.trUtf8("Proxy Configuration Error"),
71
self.trUtf8("""Proxy usage was activated"""
72
""" but no proxy host configured."""))
73
return [QNetworkProxy(QNetworkProxy.DefaultProxy)]
75
pProxyType = Preferences.getUI("ProxyType")
77
proxyType = QNetworkProxy.HttpProxy
79
proxyType = QNetworkProxy.HttpCachingProxy
81
proxyType = QNetworkProxy.Socks5Proxy
82
proxy = QNetworkProxy(proxyType, host,
83
Preferences.getUI("ProxyPort"),
84
Preferences.getUI("ProxyUser"),
85
Preferences.getUI("ProxyPassword"))
86
return [proxy, QNetworkProxy(QNetworkProxy.DefaultProxy)]
88
return [QNetworkProxy(QNetworkProxy.NoProxy)]