/******************************************************************************* ** ** 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 "blockersubscription.h" #include "ui_subscriptionform.h" #include "browser.h" #include #include #include #include #include FilterCollection::FilterCollection(const QString path, QWidget *parent) : QWidget(parent), ui(new Ui::SubscriptionForm) { ui->setupUi(this); m_name = "TODO"; m_path = path; qDebug("Adding subscription [%s]", qUtf8Printable(m_path)); QFile filterFile(m_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_rules.size()); } FilterCollection::~FilterCollection() { delete ui; } QString FilterCollection::name() const { return m_name; } /** * 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(auto rule : qAsConst(m_rules)) { result.match = true; result.block = rule->match(info); result.pattern = rule->filter(); return result; } // request matches neither whitelist nor blacklist result.match = false; result.block = false; return result; } void FilterCollection::load(const QJsonObject &json) { for(QJsonValue v : json["rules"].toArray()) { m_rules.append(createRule(v.toObject())); } } BlockerRule* FilterCollection::createRule(const QJsonObject &obj) { BlockerRule *rule; BlockerRule::NavigationType n; BlockerRule::ResourceType r; rule = new BlockerRule(RegExp(obj["firstPartyUrl"].toString()), RegExp(obj["requestUrl"].toString()), n, r, obj["shouldBlock"].toBool(), this); return rule; }