diff options
Diffstat (limited to 'src/webengine')
-rw-r--r-- | src/webengine/urlinterceptor.cpp | 40 | ||||
-rw-r--r-- | src/webengine/urlinterceptor.h | 4 |
2 files changed, 38 insertions, 6 deletions
diff --git a/src/webengine/urlinterceptor.cpp b/src/webengine/urlinterceptor.cpp index 4e1b2f1..1b44c47 100644 --- a/src/webengine/urlinterceptor.cpp +++ b/src/webengine/urlinterceptor.cpp @@ -11,6 +11,8 @@ #include <QTextStream> #include <configuration/configuration.h> #include <boost/algorithm/string.hpp> +#include <QJsonDocument> +#include <QJsonArray> UrlRequestInterceptor::UrlRequestInterceptor(const std::unique_ptr<Configuration> &config, QObject *parent) : QWebEngineUrlRequestInterceptor(parent) @@ -36,8 +38,29 @@ UrlRequestInterceptor::UrlRequestInterceptor(const std::unique_ptr<Configuration m_headers.emplace_back(pair); } } + + QFile rules(config->value<QString>("filter.json-path").value()); + if(rules.open(QIODevice::ReadOnly | QIODevice::Text)) { + auto doc = QJsonDocument::fromJson(rules.readAll()).object(); + + Q_ASSERT(doc.value("domains").isArray()); + for(QJsonValue d : doc.value("domains").toArray()) { + domain.addDomain(d.toString()); + } + + Q_ASSERT(doc.value("rules").isArray()); + for(QJsonValue rule : doc.value("rules").toArray()) { + auto p = std::make_unique<FilterRule>(rule.toObject()); + parseJson(p, rule.toObject()); + domain.addRule(p); + } + + rules.close(); + } + } +// test DNT on https://browserleaks.com/donottrack void UrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo &info) { for(const Header &header : m_headers) { @@ -46,15 +69,20 @@ void UrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo &info) if(rules.contains(info.requestUrl().host())) { info.block(rules.value(info.requestUrl().host()).isBlocking); + return; + } + + if(domain.hasMatch(info.requestUrl().host())) { + domain.process(info); } #ifdef QT_DEBUG - qDebug("request>>>"); - qDebug("firstParty url=%s", qUtf8Printable(info.firstPartyUrl().toString())); - qDebug("firstParty host=%s", qUtf8Printable(info.firstPartyUrl().host())); - qDebug("request url=%s", qUtf8Printable(info.requestUrl().toString())); - qDebug("request host=%s", qUtf8Printable(info.requestUrl().host())); - qDebug("<<<"); +// qDebug("request>>>"); +// qDebug("firstParty url=%s", qUtf8Printable(info.firstPartyUrl().toString())); +// qDebug("firstParty host=%s", qUtf8Printable(info.firstPartyUrl().host())); +// qDebug("request url=%s", qUtf8Printable(info.requestUrl().toString())); +// qDebug("request host=%s", qUtf8Printable(info.requestUrl().host())); +// qDebug("<<<"); #endif } diff --git a/src/webengine/urlinterceptor.h b/src/webengine/urlinterceptor.h index 2f91e30..06a4b97 100644 --- a/src/webengine/urlinterceptor.h +++ b/src/webengine/urlinterceptor.h @@ -14,6 +14,8 @@ #include <QVector> #include <QByteArray> +#include "web/urlfilter/filterdomain.h" + typedef std::pair<std::string, std::string> Header; class Configuration; @@ -33,6 +35,8 @@ public: private: QHash<QString, HostRule> rules; std::vector<Header> m_headers; + + FilterDomain domain; }; QHash<QString, UrlRequestInterceptor::HostRule> parse(const QString &filename); |