aboutsummaryrefslogtreecommitdiff
path: root/src/blocker/filtercollection.cpp
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2017-05-25 20:59:43 +0200
committerAqua-sama <aqua@iserlohn-fortress.net>2017-05-25 20:59:43 +0200
commit1143429887f61d8b3c74a4c3a1fafca632eb4b87 (patch)
tree87e03b38241afb33c1e7dc70c299bfb824533429 /src/blocker/filtercollection.cpp
parentMerged FilterRule into FilterNode (diff)
downloadsmolbote-1143429887f61d8b3c74a4c3a1fafca632eb4b87.tar.xz
Filter code refactoring
Diffstat (limited to 'src/blocker/filtercollection.cpp')
-rw-r--r--src/blocker/filtercollection.cpp163
1 files changed, 0 insertions, 163 deletions
diff --git a/src/blocker/filtercollection.cpp b/src/blocker/filtercollection.cpp
deleted file mode 100644
index 935776c..0000000
--- a/src/blocker/filtercollection.cpp
+++ /dev/null
@@ -1,163 +0,0 @@
-/*******************************************************************************
- **
- ** smolbote: yet another qute browser
- ** Copyright (C) 2017 Xian Nox
- **
- ** This program is free software: you can redistribute it and/or modify
- ** it under the terms of the GNU General Public License as published by
- ** the Free Software Foundation, either version 3 of the License, or
- ** (at your option) any later version.
- **
- ** This program is distributed in the hope that it will be useful,
- ** but WITHOUT ANY WARRANTY; without even the implied warranty of
- ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ** GNU General Public License for more details.
- **
- ** You should have received a copy of the GNU General Public License
- ** along with this program. If not, see <http://www.gnu.org/licenses/>.
- **
- ******************************************************************************/
-
-#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 "filternode.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()));
- load(filters.object());
-
- qDebug("Added %i rules", m_filters->columnCount());
-}
-
-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
- */
-FilterCollection::MatchResult FilterCollection::match(QWebEngineUrlRequestInfo &info)
-{
- MatchResult result;
-
- for(FilterNode *rule : m_filters->filters(info.firstPartyUrl().toString())) {
- if(rule->isValid()) {
- result.match = rule->hasMatch(info);
- if(result.match) {
- result.block = rule->shouldBlock(info);
- } else {
- result.block = false;
- }
- result.pattern = rule->domain() + " | " + rule->request();
- return result;
- }
- }
-
- // request matches neither whitelist nor blacklist
- result.match = false;
- result.block = false;
- return result;
-}
-
-void FilterCollection::load(const QJsonObject &json)
-{
- ui->title->setText(json["name"].toString());
- ui->homepage->setText(json["url"].toString());
-
- for(QJsonValue v : json["rules"].toArray()) {
- QJsonObject obj = v.toObject();
-
- FilterNode::ResourceRules r;
- r.allowed = parseJsonRules(obj["allowTypes"]);
- r.blocked = parseJsonRules(obj["blockTypes"]);
-
- m_filters->addFilter(obj["firstPartyUrl"].toString(), obj["requestUrl"].toString(), r, obj["shouldBlock"].toBool());
- }
-}
-
-FilterNode::Resources FilterCollection::parseJsonRules(const QJsonValue &obj)
-{
- FilterNode::Resources res;
- for(QJsonValue v : obj.toArray()) {
- QString t = v.toString();
- if(t == "MainFrame") {
- res.setFlag(FilterNode::ResourceType::MainFrame);
- } else if(t == "SubFrame") {
- res.setFlag(FilterNode::ResourceType::SubFrame);
- } else if(t == "Stylesheet") {
- res.setFlag(FilterNode::ResourceType::Stylesheet);
- } else if(t == "Script") {
- res.setFlag(FilterNode::ResourceType::Script);
- } else if(t == "Image") {
- res.setFlag(FilterNode::ResourceType::Image);
- } else if(t == "FontResource") {
- res.setFlag(FilterNode::ResourceType::FontResource);
- } else if(t == "SubResource") {
- res.setFlag(FilterNode::ResourceType::SubResource);
- } else if(t == "Object") {
- res.setFlag(FilterNode::ResourceType::Object);
- } else if(t == "Media") {
- res.setFlag(FilterNode::ResourceType::Media);
- } else if(t == "Worker") {
- res.setFlag(FilterNode::ResourceType::Worker);
- } else if(t == "SharedWorker") {
- res.setFlag(FilterNode::ResourceType::SharedWorker);
- } else if(t == "Prefetch") {
- res.setFlag(FilterNode::ResourceType::Prefetch);
- } else if(t == "Favicon") {
- res.setFlag(FilterNode::ResourceType::Favicon);
- } else if(t == "Xhr") {
- res.setFlag(FilterNode::ResourceType::Xhr);
- } else if(t == "Ping") {
- res.setFlag(FilterNode::ResourceType::Ping);
- } else if(t == "ServiceWorker") {
- res.setFlag(FilterNode::ResourceType::ServiceWorker);
- } else if(t == "CspWorker") {
- res.setFlag(FilterNode::ResourceType::CspReport);
- } else if(t == "PluginResource") {
- res.setFlag(FilterNode::ResourceType::PluginResource);
- }
- }
-
- return res;
-}