diff options
Diffstat (limited to 'lib/web/urlfilter/filterrule.h')
-rw-r--r-- | lib/web/urlfilter/filterrule.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/lib/web/urlfilter/filterrule.h b/lib/web/urlfilter/filterrule.h new file mode 100644 index 0000000..46690b1 --- /dev/null +++ b/lib/web/urlfilter/filterrule.h @@ -0,0 +1,68 @@ +#ifndef SMOLBOTE_FILTERRULE_H +#define SMOLBOTE_FILTERRULE_H + +#include <QObject> +#include <QRegularExpression> +#include <QStringList> +#include <QStringMatcher> +#include <QJsonObject> +#include <QUrl> +#include <QWebEngineUrlRequestInfo> + +class QUrl; +class FilterRule +{ +public: + FilterRule(const QJsonObject &filter); + ~FilterRule() = default; + + bool isValid() const; + bool process(QWebEngineUrlRequestInfo &info) const; + bool matchRequestUrl(const QString &requestUrl, const QWebEngineUrlRequestInfo::ResourceType type) const; + +private: + Q_DISABLE_COPY(FilterRule) + + enum ActionType { + Whitelist, + Blacklist, + Redirect, + SetHeader + }; + + enum RuleType { + CssRule = 0, // + DomainMatchRule = 1, // + RegExpMatchRule = 2, // match request url with regexp + StringEndsMatchRule = 3, // request url ends with string + StringContainsMatchRule = 4, // request url contains string + MatchAllUrlsRule = 5, // + Invalid = 6 + }; + + ActionType m_action; + RuleType m_type = RuleType::Invalid; + + QHash<QWebEngineUrlRequestInfo::ResourceType, bool> m_options; + + // Parsed rule for string matching (CSS Selector for CSS rules) + QString m_matchString; + // Case sensitivity for string matching + Qt::CaseSensitivity m_caseSensitivity = Qt::CaseInsensitive; + + bool m_isException = false; + + // domains this rule is allowed or blocked on + QStringList m_allowedForDomains; + QStringList m_blockedForDomains; + + QUrl m_redirectUrl; + + QRegularExpression regexp; + QStringMatcher matcher; + QString pattern; +}; + +//bool isMatchingDomain(const QString &domain, const QString &filter); + +#endif // SMOLBOTE_FILTERRULE_H |