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/filterrule.h | |
parent | Add web/urlfilter (diff) | |
download | smolbote-0e4ee2ed1c64130262e42ddfc87f2d8944c5a10c.tar.xz |
Integrate urlfilter with urlrequestinterceptor
Diffstat (limited to 'lib/web/urlfilter/filterrule.h')
-rw-r--r-- | lib/web/urlfilter/filterrule.h | 60 |
1 files changed, 31 insertions, 29 deletions
diff --git a/lib/web/urlfilter/filterrule.h b/lib/web/urlfilter/filterrule.h index 46690b1..f20ab15 100644 --- a/lib/web/urlfilter/filterrule.h +++ b/lib/web/urlfilter/filterrule.h @@ -8,61 +8,63 @@ #include <QJsonObject> #include <QUrl> #include <QWebEngineUrlRequestInfo> +#include <memory> 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 + SetHeader, + InvalidAction }; - enum RuleType { - CssRule = 0, // - DomainMatchRule = 1, // + enum MatchType { +// 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 + InvalidMatch = 6, }; - ActionType m_action; - RuleType m_type = RuleType::Invalid; + FilterRule(const QJsonObject &filter); + ~FilterRule() = default; - QHash<QWebEngineUrlRequestInfo::ResourceType, bool> m_options; + void setActionType(ActionType type); + void setMatchType(MatchType type, const QString &pattern = QString()); + void setRedirectUrl(const QUrl &url); + void addHeaderRule(const QByteArray &header, const QByteArray &value); + + bool isValid() const; + bool process(QWebEngineUrlRequestInfo &info) const; + bool matchRequestUrl(const QString &requestUrl, const QWebEngineUrlRequestInfo::ResourceType type) const; + +private: + Q_DISABLE_COPY(FilterRule) + + + ActionType m_actionType = ActionType::InvalidAction; + MatchType m_matchType = MatchType::InvalidMatch; + + QHash<QWebEngineUrlRequestInfo::ResourceType, bool> m_resourceTypeOptions; + QHash<QByteArray, QByteArray> m_headers; // 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; + QRegularExpression m_regexp; + QStringMatcher m_matcher; + QString m_pattern; }; -//bool isMatchingDomain(const QString &domain, const QString &filter); +void parseJson(std::unique_ptr<FilterRule> &rule, const QJsonObject &filter); #endif // SMOLBOTE_FILTERRULE_H |