/* * 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 "urlinterceptor.h" #include #include UrlRequestInterceptor::UrlRequestInterceptor(const QString &path, QObject *parent) : QWebEngineUrlRequestInterceptor(parent) { #ifdef QT_DEBUG qDebug("Reading request blocklist: %s", qUtf8Printable(path)); #endif int n_rules = 0; QFile filter(path); if(filter.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream out(&filter); while(!out.atEnd()) { const QString &line = out.readLine(); if(!line.startsWith('!')) { FilterRule r(line); // check if valid m_rules.push_back(std::move(r)); ++n_rules; } } filter.close(); } qDebug("Added %i rules", n_rules); } void UrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo &info) { for(const FilterRule &test : m_rules) { const QUrl &url = info.requestUrl(); if(test.shouldBlock(url)) { info.block(true); #ifdef QT_DEBUG qDebug("blocked [%s] %s", qUtf8Printable(info.firstPartyUrl().toString()), qUtf8Printable(url.toString())); #endif return; } } } bool shouldBlock(const QUrl &url, const QString &test) { if(url.toString().contains(test)) { return true; } return false; }