aboutsummaryrefslogtreecommitdiff
path: root/lib/web/urlfilter/filterdomain.cpp
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2018-07-07 19:45:45 +0200
committerAqua-sama <aqua@iserlohn-fortress.net>2018-07-07 19:45:45 +0200
commit0e4ee2ed1c64130262e42ddfc87f2d8944c5a10c (patch)
tree45b852937529d19101dee06c82c924c57c3a47aa /lib/web/urlfilter/filterdomain.cpp
parentAdd web/urlfilter (diff)
downloadsmolbote-0e4ee2ed1c64130262e42ddfc87f2d8944c5a10c.tar.xz
Integrate urlfilter with urlrequestinterceptor
Diffstat (limited to 'lib/web/urlfilter/filterdomain.cpp')
-rw-r--r--lib/web/urlfilter/filterdomain.cpp48
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);
+ }
}