diff options
author | Aqua-sama <aqua@iserlohn-fortress.net> | 2018-07-07 19:45:45 +0200 |
---|---|---|
committer | Aqua-sama <aqua@iserlohn-fortress.net> | 2018-07-07 19:45:45 +0200 |
commit | 0e4ee2ed1c64130262e42ddfc87f2d8944c5a10c (patch) | |
tree | 45b852937529d19101dee06c82c924c57c3a47aa /lib/web/urlfilter/filterdomain.cpp | |
parent | Add web/urlfilter (diff) | |
download | smolbote-0e4ee2ed1c64130262e42ddfc87f2d8944c5a10c.tar.xz |
Integrate urlfilter with urlrequestinterceptor
Diffstat (limited to 'lib/web/urlfilter/filterdomain.cpp')
-rw-r--r-- | lib/web/urlfilter/filterdomain.cpp | 48 |
1 files changed, 27 insertions, 21 deletions
diff --git a/lib/web/urlfilter/filterdomain.cpp b/lib/web/urlfilter/filterdomain.cpp index 53bc7db..99cc71c 100644 --- a/lib/web/urlfilter/filterdomain.cpp +++ b/lib/web/urlfilter/filterdomain.cpp @@ -22,41 +22,47 @@ bool isMatchingDomain(const QString &domain, const QString &filter) return index > 0 && domain[index - 1] == QLatin1Char('.'); } -FilterDomain::FilterDomain(MatchType type, QObject *parent) +FilterDomain::FilterDomain(QObject *parent) : QObject(parent) { - setType(type); } -void FilterDomain::setType(MatchType type) +void FilterDomain::addDomain(const QString &domain, bool isException) { - m_type = type; + if(domain.isEmpty()) + return; + + if(!isException) + m_allowedOnDomains.append(domain); + else + m_blockedOnDomains.append(domain); } -void FilterDomain::addDomain(const QString &domain) +void FilterDomain::addRule(FilterRule_ptr &rule) { - if(!domain.isEmpty()) - m_domains.append(domain); + Q_ASSERT(rule); + m_rules.emplace_back(std::move(rule)); } bool FilterDomain::hasMatch(const QString &host) const { - // match all domains -> this rule applies to all domains - if(m_type == WhitelistAll) - return true; - - // match no domains -> this rule applies to no domains - if(m_type == BlacklistAll) - return false; - - // is this a whitelist or blacklist domain rule? - // should it apply to added domains or not - const bool whitelist = (m_type == Whitelist); + for(const auto &domain : qAsConst(m_blockedOnDomains)) { + if(isMatchingDomain(host, domain)) + return false; + } - for(const auto &domain : qAsConst(m_domains)) { + for(const auto &domain : qAsConst(m_allowedOnDomains)) { if(isMatchingDomain(host, domain)) - return whitelist; + return true; } - return !whitelist; + return false; +} + +void FilterDomain::process(QWebEngineUrlRequestInfo &info) const +{ + for(const FilterRule_ptr &rule : m_rules) { + if(rule->matchRequestUrl(info.requestUrl().toString(), info.resourceType())) + rule->process(info); + } } |