def test_connection(self): self.message.setText( '<span style="font-size: 10px; color: #000000;">' + 'Verbindung wird getestet.' + '</span>') self.nam.finished.connect(self.test_reply) self.nam.sslErrors.connect(self.ssl_errors) ssl_config = QSslConfiguration().defaultConfiguration() ssl_config.setCiphers(QSslSocket().supportedCiphers()) if self.certificate: certificate = QSslCertificate(encoded=self.certificate, format=QSsl.Pem) ssl_config.setCaCertificates([certificate]) else: ssl_config.setCaCertificates([]) url = QUrl(self.url_edit.text()) url.setPath("/".join( filter(bool, (url.path() + "/ajax/read.php").split("/")))) request = QNetworkRequest(url) request.setSslConfiguration(ssl_config) request.setRawHeader( "Authorization", "Basic ".encode('utf-8') + b64encode( (self.username_edit.text() + ":" + self.password_edit.text()).encode('utf-8'))) request.setHeader(QNetworkRequest.ContentTypeHeader, "application/x-www-form-urlencoded") self.replies.add(self.nam.post(request, QByteArray()))
def install_certificates(): ssl_config = QSslConfiguration.defaultConfiguration() ssl_config.setProtocol(QSsl.SecureProtocols) certs = ssl_config.caCertificates() for cert_filename in os.listdir(make_abs_path('certs')): if os.path.splitext(cert_filename)[1] == '.pem': cert_filepath = make_abs_path('certs', cert_filename) cert_file = QFile(cert_filepath) cert_file.open(QIODevice.ReadOnly) cert = QSslCertificate(cert_file) certs.append(cert) ssl_config.setCaCertificates(certs) QSslConfiguration.setDefaultConfiguration(ssl_config)
def configureSsl(self,request): if not self.initialized: self.setProxy() self.initialized = True defssl = QSslConfiguration.defaultConfiguration() defssl.setPeerVerifyMode(QSslSocket.VerifyPeer) QSslSocket.addDefaultCaCertificates('/etc/ssl/certs/') request.setSslConfiguration(defssl)
def test_connection(self): self.message.setText('<span style="font-size: 10px; color: #000000;">' + 'Verbindung wird getestet.' + '</span>') self.nam.finished.connect(self.test_reply) self.nam.sslErrors.connect(self.ssl_errors) ssl_config = QSslConfiguration().defaultConfiguration() ssl_config.setCiphers(QSslSocket().supportedCiphers()) if self.certificate: certificate = QSslCertificate(encoded=self.certificate, format=QSsl.Pem) ssl_config.setCaCertificates([certificate]) else: ssl_config.setCaCertificates([]) url = QUrl(self.url_edit.text()) url.setPath("/".join(filter(bool, (url.path() + "/ajax/read.php").split("/")))) request = QNetworkRequest(url) request.setSslConfiguration(ssl_config) request.setRawHeader("Authorization", "Basic ".encode('utf-8') + b64encode((self.username_edit.text() + ":" + self.password_edit.text()).encode('utf-8'))) request.setHeader(QNetworkRequest.ContentTypeHeader, "application/x-www-form-urlencoded") self.replies.add(self.nam.post(request, QByteArray()))
def createRequest(self, op, request, outgoingData=None): conf = QSslConfiguration() conf.setProtocol(QSsl.TlsV1) request.setSslConfiguration(conf) return QNetworkAccessManager.createRequest(self, op, request, outgoingData)
def __init__(self, user_agent=default_user_agent, wait_timeout=8, wait_callback=None, log_level=logging.WARNING, display=False, viewport_size=(800, 600), ignore_ssl_errors=True, cache_dir=os.path.join(tempfile.gettempdir(), "ghost.py"), plugins_enabled=False, java_enabled=False, plugin_path=['/usr/lib/mozilla/plugins', ], download_images=True, qt_debug=False, no_sslv3 = True, show_scroolbars=True): self.http_resources = [] self.user_agent = user_agent self.wait_timeout = wait_timeout self.wait_callback = wait_callback self.ignore_ssl_errors = ignore_ssl_errors self.loaded = True if not sys.platform.startswith('win') and not 'DISPLAY' in os.environ\ and not hasattr(Ghost, 'xvfb'): try: os.environ['DISPLAY'] = ':99' Ghost.xvfb = subprocess.Popen(['Xvfb', ':99']) except OSError: raise Error('Xvfb is required to a ghost run outside ' + 'an X instance') self.display = display if not Ghost._app: Ghost._app = QApplication.instance() or QApplication(['ghost']) qInstallMsgHandler(QTMessageProxy(qt_debug)) if plugin_path: for p in plugin_path: Ghost._app.addLibraryPath(p) if no_sslv3: # enable tls1 only old = QSslConfiguration.defaultConfiguration() old.setProtocol(QSsl.TlsV1) QSslConfiguration.setDefaultConfiguration(old) self.popup_messages = [] self.page = GhostWebPage(Ghost._app, self) QtWebKit.QWebSettings.setMaximumPagesInCache(0) QtWebKit.QWebSettings.setObjectCacheCapacities(0, 0, 0) QtWebKit.QWebSettings.globalSettings().setAttribute( QtWebKit.QWebSettings.LocalStorageEnabled, True) self.page.setForwardUnsupportedContent(True) self.page.settings().setAttribute( QtWebKit.QWebSettings.AutoLoadImages, download_images) self.page.settings().setAttribute( QtWebKit.QWebSettings.PluginsEnabled, plugins_enabled) self.page.settings().setAttribute(QtWebKit.QWebSettings.JavaEnabled, java_enabled) if not show_scroolbars: self.page.mainFrame().setScrollBarPolicy(QtCore.Qt.Vertical, QtCore.Qt.ScrollBarAlwaysOff) self.page.mainFrame().setScrollBarPolicy(QtCore.Qt.Horizontal, QtCore.Qt.ScrollBarAlwaysOff) self.set_viewport_size(*viewport_size) # Page signals self.page.loadFinished.connect(self._page_loaded) self.page.loadStarted.connect(self._page_load_started) self.page.unsupportedContent.connect(self._unsupported_content) self.manager = self.page.networkAccessManager() self.manager.finished.connect(self._request_ended) self.manager.sslErrors.connect(self._on_manager_ssl_errors) # Cache self.cache = QNetworkDiskCache() self.cache.setCacheDirectory(cache_dir) self.manager.setCache(self.cache) # Cookie jar self.cookie_jar = QNetworkCookieJar() self.manager.setCookieJar(self.cookie_jar) # User Agent self.page.setUserAgent(self.user_agent) self.page.networkAccessManager().authenticationRequired\ .connect(self._authenticate) self.page.networkAccessManager().proxyAuthenticationRequired\ .connect(self._authenticate) self.main_frame = self.page.mainFrame() logger.setLevel(log_level) if self.display: class MyQWebView(QtWebKit.QWebView): def sizeHint(self): return QSize(*viewport_size) self.webview = MyQWebView() if plugins_enabled: self.webview.settings().setAttribute( QtWebKit.QWebSettings.PluginsEnabled, True) if java_enabled: self.webview.settings().setAttribute( QtWebKit.QWebSettings.JavaEnabled, True) self.webview.setPage(self.page) self.webview.show() else: self.webview = None
def __init__(self, user_agent=default_user_agent, wait_timeout=8, wait_callback=None, log_level=logging.WARNING, display=False, viewport_size=(800, 600), ignore_ssl_errors=True, cache_dir=os.path.join(tempfile.gettempdir(), "ghost.py"), plugins_enabled=False, java_enabled=False, plugin_path=[ '/usr/lib/mozilla/plugins', ], download_images=True, qt_debug=False, no_sslv3=True, show_scroolbars=True): self.http_resources = [] self.user_agent = user_agent self.wait_timeout = wait_timeout self.wait_callback = wait_callback self.ignore_ssl_errors = ignore_ssl_errors self.loaded = True if not sys.platform.startswith('win') and not 'DISPLAY' in os.environ\ and not hasattr(Ghost, 'xvfb'): try: os.environ['DISPLAY'] = ':99' Ghost.xvfb = subprocess.Popen(['Xvfb', ':99']) except OSError: raise Error('Xvfb is required to a ghost run outside ' + 'an X instance') self.display = display if not Ghost._app: Ghost._app = QApplication.instance() or QApplication(['ghost']) qInstallMsgHandler(QTMessageProxy(qt_debug)) if plugin_path: for p in plugin_path: Ghost._app.addLibraryPath(p) if no_sslv3: # enable tls1 only old = QSslConfiguration.defaultConfiguration() old.setProtocol(QSsl.TlsV1) QSslConfiguration.setDefaultConfiguration(old) self.popup_messages = [] self.page = GhostWebPage(Ghost._app, self) QtWebKit.QWebSettings.setMaximumPagesInCache(0) QtWebKit.QWebSettings.setObjectCacheCapacities(0, 0, 0) QtWebKit.QWebSettings.globalSettings().setAttribute( QtWebKit.QWebSettings.LocalStorageEnabled, True) self.page.setForwardUnsupportedContent(True) self.page.settings().setAttribute(QtWebKit.QWebSettings.AutoLoadImages, download_images) self.page.settings().setAttribute(QtWebKit.QWebSettings.PluginsEnabled, plugins_enabled) self.page.settings().setAttribute(QtWebKit.QWebSettings.JavaEnabled, java_enabled) if not show_scroolbars: self.page.mainFrame().setScrollBarPolicy( QtCore.Qt.Vertical, QtCore.Qt.ScrollBarAlwaysOff) self.page.mainFrame().setScrollBarPolicy( QtCore.Qt.Horizontal, QtCore.Qt.ScrollBarAlwaysOff) self.set_viewport_size(*viewport_size) # Page signals self.page.loadFinished.connect(self._page_loaded) self.page.loadStarted.connect(self._page_load_started) self.page.unsupportedContent.connect(self._unsupported_content) self.manager = self.page.networkAccessManager() self.manager.finished.connect(self._request_ended) self.manager.sslErrors.connect(self._on_manager_ssl_errors) # Cache self.cache = QNetworkDiskCache() self.cache.setCacheDirectory(cache_dir) self.manager.setCache(self.cache) # Cookie jar self.cookie_jar = QNetworkCookieJar() self.manager.setCookieJar(self.cookie_jar) # User Agent self.page.setUserAgent(self.user_agent) self.page.networkAccessManager().authenticationRequired\ .connect(self._authenticate) self.page.networkAccessManager().proxyAuthenticationRequired\ .connect(self._authenticate) self.main_frame = self.page.mainFrame() logger.setLevel(log_level) if self.display: class MyQWebView(QtWebKit.QWebView): def sizeHint(self): return QSize(*viewport_size) self.webview = MyQWebView() if plugins_enabled: self.webview.settings().setAttribute( QtWebKit.QWebSettings.PluginsEnabled, True) if java_enabled: self.webview.settings().setAttribute( QtWebKit.QWebSettings.JavaEnabled, True) self.webview.setPage(self.page) self.webview.show() else: self.webview = None