aboutsummaryrefslogtreecommitdiff
path: root/lib/web/urlfilter/filterrule.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/web/urlfilter/filterrule.h')
-rw-r--r--lib/web/urlfilter/filterrule.h60
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