#ifndef SMOLBOTE_FILTERRULE_H #define SMOLBOTE_FILTERRULE_H #include #include #include #include #include #include #include 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 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