summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonatan Pålsson <jonatan.palsson@pelagicore.com>2014-04-16 10:54:03 +0200
committerJonatan Pålsson <jonatan.palsson@pelagicore.com>2014-04-16 10:54:03 +0200
commit5ea1fc36abe607691ef52156720726da40c8d398 (patch)
treed335d2e568a9e7ec983344c2a5c1a57562afaf27
parentb501591d8224dc5f591db9de5d95356b2fcd9b69 (diff)
parent1a7ca3a227be6083a20a343a25afa595559b119b (diff)
downloadbrowser-poc-5ea1fc36abe607691ef52156720726da40c8d398.tar.gz
Merge branch 'feature_proxy'
-rw-r--r--browser/browser.cpp54
-rw-r--r--browser/browserconfig.h4
-rw-r--r--browser/networkmanager.cpp29
-rw-r--r--browser/networkmanager.h10
4 files changed, 93 insertions, 4 deletions
diff --git a/browser/browser.cpp b/browser/browser.cpp
index 6dcd0df..5a0834c 100644
--- a/browser/browser.cpp
+++ b/browser/browser.cpp
@@ -15,6 +15,7 @@
#include <QDBusConnection>
#include <QFile>
#include <QWebSettings>
+#include <QNetworkProxy>
#include "browser.h"
#include "browserview.h"
@@ -22,6 +23,9 @@
#include "networkmanager.h"
#include "iwebpagewindow_adaptor.h"
#include "iuserinput_adaptor.h"
+#include "browserconfig.h"
+
+bool restoreSavedProxyConfig();
browser::browser(cachemanager *manager, networkmanager *nm, QObject *parent) :
QObject(parent), m_cacheManager (manager), m_networkManager(nm)
@@ -30,6 +34,8 @@ browser::browser(cachemanager *manager, networkmanager *nm, QObject *parent) :
QWebSettings::globalSettings()->
setAttribute(QWebSettings::PluginsEnabled, true);
+
+ restoreSavedProxyConfig();
}
conn::brw::ERROR_IDS browser::createPageWindow(int a_eDeviceId, const conn::brw::Rect & a_oGeometry, conn::brw::OBJECT_HANDLE &a_hPageWindowHandle) {
@@ -128,3 +134,51 @@ conn::brw::ERROR_IDS browser::getPageWindows(conn::brw::ObjectHandleList &a_oPag
}
return ret;
}
+
+bool restoreSavedProxyConfig() {
+ QString proxyHost;
+ int proxyPort;
+ QString proxyUsername;
+ QString proxyPassword;
+ BrowserConfig *bc = BrowserConfig::instance();
+
+ if (bc->contains(BrowserConfig::CONFIG_PROXY_HOST))
+ proxyHost = bc->getValue<QString>(BrowserConfig::CONFIG_PROXY_HOST);
+ else
+ return false;
+
+ if (bc->contains(BrowserConfig::CONFIG_PROXY_PORT)) {
+ proxyPort = bc->getValue<int>(BrowserConfig::CONFIG_PROXY_PORT);
+ }
+ else {
+ qDebug("Found partial proxy configuration; CONFIG_PROXY_PORT missing");
+ return false;
+ }
+
+ if (bc->contains(BrowserConfig::CONFIG_PROXY_USERNAME)) {
+ proxyUsername = bc->getValue<QString>(BrowserConfig::CONFIG_PROXY_USERNAME);
+ }
+ else {
+ qDebug("Found partial proxy configuration; CONFIG_PROXY_USERNAME missing");
+ return false;
+ }
+
+ if (bc->contains(BrowserConfig::CONFIG_PROXY_PASSWORD)) {
+ proxyPassword = bc->getValue<QString>(BrowserConfig::CONFIG_PROXY_PASSWORD);
+ }
+ else {
+ qDebug("Found partial proxy configuration; CONFIG_PROXY_PASSWORD missing");
+ return false;
+ }
+
+ // All properties found, let's set up the proxy
+
+ QNetworkProxy proxy;
+ proxy.setType(QNetworkProxy::HttpProxy);
+ proxy.setHostName(proxyHost);
+ proxy.setPort(proxyPort);
+ proxy.setUser(proxyUsername);
+ proxy.setPassword(proxyPassword);
+ QNetworkProxy::setApplicationProxy(proxy);
+
+}
diff --git a/browser/browserconfig.h b/browser/browserconfig.h
index 8a43bed..493d9dd 100644
--- a/browser/browserconfig.h
+++ b/browser/browserconfig.h
@@ -24,6 +24,10 @@ public:
enum BrowserConfigKey {
CONFIG_CACHEPOLICY,
CONFIG_STARTPAGE,
+ CONFIG_PROXY_HOST,
+ CONFIG_PROXY_PORT,
+ CONFIG_PROXY_USERNAME,
+ CONFIG_PROXY_PASSWORD
};
static BrowserConfig* instance() {
diff --git a/browser/networkmanager.cpp b/browser/networkmanager.cpp
index e047138..05e62b3 100644
--- a/browser/networkmanager.cpp
+++ b/browser/networkmanager.cpp
@@ -17,6 +17,7 @@
#include <QAuthenticator>
#include <QEventLoop>
#include <QNetworkReply>
+#include <QNetworkProxy>
#include <QSslError>
#include <QSslSocket>
@@ -93,6 +94,9 @@ networkmanager::networkmanager(QNetworkAccessManager *nam, QObject *parent) :
this,SLOT (onAuthenticationRequired(QNetworkReply *, QAuthenticator *)));
connect(nam, SIGNAL(sslErrors(QNetworkReply *, const QList<QSslError> &)),
this,SLOT (onSslErrors(QNetworkReply *, const QList<QSslError> &)));
+ connect(nam, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *)),
+ this,SLOT (onProxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *)));
+
}
conn::brw::ERROR_IDS networkmanager::closeAuthenticationDialog(conn::brw::DIALOG_RESULT res, const conn::brw::AuthenticationData& data)
@@ -113,12 +117,12 @@ void networkmanager::onAuthenticationRequired(QNetworkReply *reply, QAuthenticat
emit onAuthenticationDialog(data);
qDebug() << "Authentication required";
QEventLoop loop;
- connect (this, SIGNAL(doCloseAuthenticationDialog(bool, const conn::brw::AuthenticationData)), this, SLOT(authenticate(bool, const conn::brw::AuthenticationData)));
+ connect (this, SIGNAL(doCloseAuthenticationDialog(bool, const conn::brw::AuthenticationData)), this, SLOT(authenticateProxy(bool, const conn::brw::AuthenticationData)));
connect (this, SIGNAL(doCloseAuthenticationDialog(bool, const conn::brw::AuthenticationData)), &loop, SLOT(quit()));
loop.exec();
qDebug() << "Authentication provided: user" << m_authData.strUserName << "password:" << m_authData.strPassword;
- if (m_authBool) {
+ if (m_authBoolProxy) {
authenticator->setUser(m_authData.strUserName);
authenticator->setPassword(m_authData.strPassword);
} else {
@@ -158,3 +162,24 @@ void networkmanager::onSslErrors(QNetworkReply *reply, const QList<QSslError> &
}
}
+void networkmanager::onProxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)
+{
+ conn::brw::AuthenticationData data;
+ data.strHost = proxy.hostName();
+ emit onAuthenticationDialog(data);
+ qDebug() << "Proxy authentication required";
+ QEventLoop loop;
+ connect (this, SIGNAL(doCloseAuthenticationDialog(bool, const conn::brw::AuthenticationData)), this, SLOT(authenticate(bool, const conn::brw::AuthenticationData)));
+ connect (this, SIGNAL(doCloseAuthenticationDialog(bool, const conn::brw::AuthenticationData)), &loop, SLOT(quit()));
+ loop.exec();
+ qDebug() << "Proxy authentication provided: user" << m_authData.strUserName << "password:" << m_authData.strPassword;
+
+ if (m_authBool) {
+ authenticator->setUser(m_authData.strUserName);
+ authenticator->setPassword(m_authData.strPassword);
+ } else {
+ qDebug() << "Action was cancelled";
+ emit onAuthenticationDialogCancel(data);
+ }
+}
+
diff --git a/browser/networkmanager.h b/browser/networkmanager.h
index 7ee7229..618425b 100644
--- a/browser/networkmanager.h
+++ b/browser/networkmanager.h
@@ -46,11 +46,17 @@ public Q_SLOTS:
// Internal
void onAuthenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator);
void onSslErrors(QNetworkReply *reply, const QList<QSslError> & errors);
+ void onProxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *);
void authenticate(bool b, const conn::brw::AuthenticationData ad)
{
m_authBool = b;
m_authData = ad;
}
+ void authenticateProxy(bool b, const conn::brw::AuthenticationData ad)
+ {
+ m_authBoolProxy = b;
+ m_authDataProxy = ad;
+ }
void closeSsl(bool isOK, bool saveCert)
{
m_isSslOk = isOK;
@@ -58,8 +64,8 @@ public Q_SLOTS:
}
private:
QNetworkAccessManager *m_nam;
- bool m_authBool, m_isSslOk, m_sslSaveCert;
- conn::brw::AuthenticationData m_authData;
+ bool m_authBool, m_authBoolProxy, m_isSslOk, m_sslSaveCert;
+ conn::brw::AuthenticationData m_authData, m_authDataProxy;
};
#endif // NETWORKMAMAGER_H