From 1143429887f61d8b3c74a4c3a1fafca632eb4b87 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Thu, 25 May 2017 20:59:43 +0200 Subject: Filter code refactoring --- src/blocker/filtercollection.cpp | 163 --------------------------------------- 1 file changed, 163 deletions(-) delete mode 100644 src/blocker/filtercollection.cpp (limited to 'src/blocker/filtercollection.cpp') 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 . - ** - ******************************************************************************/ - -#include "filtercollection.h" -#include "ui_subscriptionform.h" - -#include "browser.h" -#include -#include - -#include -#include -#include - -#include -#include - -#include -#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; -} -- cgit v1.2.1