diff options
author | Aqua-sama <aqua@iserlohn-fortress.net> | 2017-12-23 16:45:31 +0100 |
---|---|---|
committer | Aqua-sama <aqua@iserlohn-fortress.net> | 2017-12-23 16:45:31 +0100 |
commit | f7ed63179fa4f99322d6c7716e17466ec4e3e4ce (patch) | |
tree | f187d1f73300f1ac0882a4be569d567bb4ed29f7 /src/filter/filtercollection.cpp | |
parent | Removed SingleApplication::SessionParam (diff) | |
download | smolbote-f7ed63179fa4f99322d6c7716e17466ec4e3e4ce.tar.xz |
Request filter now properly takes hostlists
- hostslist directory is set in browser.filterPath
Diffstat (limited to 'src/filter/filtercollection.cpp')
-rw-r--r-- | src/filter/filtercollection.cpp | 157 |
1 files changed, 0 insertions, 157 deletions
diff --git a/src/filter/filtercollection.cpp b/src/filter/filtercollection.cpp deleted file mode 100644 index e151a10..0000000 --- a/src/filter/filtercollection.cpp +++ /dev/null @@ -1,157 +0,0 @@ -/* - * This file is part of smolbote. It's copyrighted by the contributors recorded - * in the version control history of the file, available from its original - * location: git://neueland.iserlohn-fortress.net/smolbote.git - * - * SPDX-License-Identifier: GPL-3.0 - */ - -#include "filtercollection.h" -#include "ui_subscriptionform.h" - -#include "browser.h" -#include <QNetworkRequest> -#include <QNetworkReply> - -#include <QJsonDocument> -#include <QJsonObject> -#include <QJsonArray> - -#include <QListWidget> -#include <QLabel> - -#include <QTreeView> -#include "filtertree.h" -#include "filter.h" - -FilterCollection::FilterCollection(const QString path, QWidget *parent) : - QWidget(parent), - ui(new Ui::SubscriptionForm) -{ - ui->setupUi(this); - - ui->homepage->setText(path); - - qDebug("Adding subscription [%s]", qUtf8Printable(path)); - - m_filters = new FilterTree(this); - ui->treeView->setModel(m_filters); - - QFile filterFile(path); - if(!filterFile.open(QIODevice::ReadOnly)) { - qWarning("Could not open filter!"); - return; - } - - QJsonDocument filters(QJsonDocument::fromJson(filterFile.readAll())); - qDebug("Added %i rules", load(filters.object())); -} - -FilterCollection::~FilterCollection() -{ - delete ui; -} - -QString FilterCollection::name() const -{ - return ui->title->text(); -} - -/** - * Check if a URL request should be blocked or not - * @param info - * @return true if it should be blocked; false otherwise - */ -bool FilterCollection::match(QWebEngineUrlRequestInfo &info) -{ - for(QString domain : m_filterlist.keys()) { - if(domain.isEmpty() || info.firstPartyUrl().toString().contains(domain)) { - // domain matched - - for(QString rule : m_filterlist.value(domain).keys()) { - if(rule.isEmpty() || info.requestUrl().toString().contains(rule)) { - return m_filterlist.value(domain).value(rule); - } - } - } - } - - return false; -} - -/** - * Load rules from JSON object - * @param json - */ -int FilterCollection::load(const QJsonObject &json) -{ - int number = 0; - - ui->title->setText(json["name"].toString()); - ui->homepage->setText(json["url"].toString()); - - QJsonObject rules = json["rules"].toObject(); - for(QString key : rules.keys()) { - ++number; - qDebug("+ '%s'", qUtf8Printable(key)); - - QJsonObject domain = rules.value(key).toObject(); - QHash<QString, bool> d; - - for(QString r : domain.keys()) { - d.insert(r, domain.value(r).toBool()); - qDebug("|-'%s': %i", qUtf8Printable(r), domain.value(r).toBool()); - } - - m_filterlist.insert(key, d); - - } - return number; -} - -Filter::Resources FilterCollection::parseJsonRules(const QJsonValue &obj) -{ - Filter::Resources res; - for(QJsonValue v : obj.toArray()) { - QString t = v.toString(); - if(t == "MainFrame") { - res.setFlag(Filter::ResourceType::MainFrame); - } else if(t == "SubFrame") { - res.setFlag(Filter::ResourceType::SubFrame); - } else if(t == "Stylesheet") { - res.setFlag(Filter::ResourceType::Stylesheet); - } else if(t == "Script") { - res.setFlag(Filter::ResourceType::Script); - } else if(t == "Image") { - res.setFlag(Filter::ResourceType::Image); - } else if(t == "FontResource") { - res.setFlag(Filter::ResourceType::Font); - } else if(t == "SubResource") { - res.setFlag(Filter::ResourceType::SubResource); - } else if(t == "Object") { - res.setFlag(Filter::ResourceType::Object); - } else if(t == "Media") { - res.setFlag(Filter::ResourceType::Media); - } else if(t == "Worker") { - res.setFlag(Filter::ResourceType::Worker); - } else if(t == "SharedWorker") { - res.setFlag(Filter::ResourceType::SharedWorker); - } else if(t == "Prefetch") { - res.setFlag(Filter::ResourceType::Prefetch); - } else if(t == "Favicon") { - res.setFlag(Filter::ResourceType::Favicon); - } else if(t == "Xhr") { - res.setFlag(Filter::ResourceType::Xhr); - } else if(t == "Ping") { - res.setFlag(Filter::ResourceType::Ping); - } else if(t == "ServiceWorker") { - res.setFlag(Filter::ResourceType::ServiceWorker); - } else if(t == "CspWorker") { - res.setFlag(Filter::ResourceType::CspReport); - } else if(t == "PluginResource") { - res.setFlag(Filter::ResourceType::PluginResource); - } - } - - return res; -} |