]> gitweb.stoutner.com Git - PrivacyBrowserPC.git/blob - src/helpers/FilterListHelper.h
Finish block list implementation.
[PrivacyBrowserPC.git] / src / helpers / FilterListHelper.h
1 /*
2  * Copyright 2024 Soren Stoutner <soren@stoutner.com>.
3  *
4  * This file is part of Privacy Browser PC <https://www.stoutner.com/privacy-browser-pc/>.
5  *
6  * Privacy Browser PC is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * Privacy Browser PC is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Privacy Browser PC.  If not, see <http://www.gnu.org/licenses/>.
18  */
19
20 #ifndef FILTERLISTHELPER_H
21 #define FILTERLISTHELPER_H
22
23 // Application headers.
24 #include "structs/FilterListStruct.h"
25 #include "structs/RequestStruct.h"
26 #include "structs/UrlStruct.h"
27
28 // Qt framework headers.
29 #include <QString>
30 #include <QWebEngineUrlRequestInfo>
31
32 class FilterListHelper
33 {
34 public:
35     // The default constructor.
36     FilterListHelper();
37
38     // The public static disposition constant integers.
39     static const int DEFAULT = 0;
40     static const int ALLOWED = 1;
41     static const int BLOCKED = 2;
42
43     // The public static sublist constant integers.
44     static const int MAIN_ALLOWLIST = 0;
45     static const int MAIN_BLOCKLIST = 1;
46     static const int INITIAL_DOMAIN_BLOCKLIST = 2;
47     static const int REGULAR_EXPRESSION_BLOCKLIST = 3;
48
49     // The public variables.
50     FilterListStruct *easyListStructPointer;
51     FilterListStruct *easyPrivacyStructPointer;
52     FilterListStruct *fanboyAnnoyanceStructPointer;
53     FilterListStruct *ultraListStructPointer;
54     FilterListStruct *ultraPrivacyStructPointer;
55
56     // The public functions.
57     bool checkFilterLists(QWebEngineUrlRequestInfo &urlRequestInfo, RequestStruct *requestStructPointer) const;
58     QString getDispositionString(int dispositionInt) const;
59     QString getNavigationTypeString(int navigationTypeInt) const;
60     QString getRequestOptionDispositionString(const FilterOptionEnum::Disposition filterOptionDisposition) const;
61     QString getResourceTypeString(int resourceTypeInt) const;
62     QString getSublistName(int sublistInt) const;
63
64 private:
65     // The private translated disposition strings.
66     QString DEFAULT_STRING;
67     QString ALLOWED_STRING;
68     QString BLOCKED_STRING;
69
70     // The private translated filter option dispositions.
71     QString FILTER_OPTION_NULL;
72     QString FILTER_OPTION_APPLY;
73     QString FILTER_OPTION_OVERRIDE;
74
75     // The private translated navigation type strings.
76     QString NAVIGATION_TYPE_LINK;
77     QString NAVIGATION_TYPE_TYPED;
78     QString NAVIGATION_TYPE_FORM_SUBMITTED;
79     QString NAVIGATION_TYPE_BACK_FORWARD;
80     QString NAVIGATION_TYPE_RELOAD;
81     QString NAVIGATION_TYPE_REDIRECT;
82     QString NAVIGATION_TYPE_OTHER;
83
84     // The private translated resource type strings.
85     QString RESOURCE_TYPE_MAIN_FRAME;
86     QString RESOURCE_TYPE_SUB_FRAME;
87     QString RESOURCE_TYPE_STYLESHEET;
88     QString RESOURCE_TYPE_SCRIPT;
89     QString RESOURCE_TYPE_IMAGE;
90     QString RESOURCE_TYPE_FONT_RESOURCE;
91     QString RESOURCE_TYPE_SUB_RESOURCE;
92     QString RESOURCE_TYPE_OBJECT;
93     QString RESOURCE_TYPE_MEDIA;
94     QString RESOURCE_TYPE_WORKER;
95     QString RESOURCE_TYPE_SHARED_WORKER;
96     QString RESOURCE_TYPE_PREFETCH;
97     QString RESOURCE_TYPE_FAVICON;
98     QString RESOURCE_TYPE_XHR;
99     QString RESOURCE_TYPE_PING;
100     QString RESOURCE_TYPE_SERVICE_WORKER;
101     QString RESOURCE_TYPE_CSP_REPORT;
102     QString RESOURCE_TYPE_PLUGIN_RESOURCE;
103     QString RESOURCE_TYPE_NAVIGATION_PRELOAD_MAIN_FRAME;
104     QString RESOURCE_TYPE_NAVIGATION_PRELOAD_SUB_FRAME;
105     QString RESOURCE_TYPE_UNKNOWN;
106
107     // The private translated sublist strings.
108     QString MAIN_ALLOWLIST_STRING;
109     QString MAIN_BLOCKLIST_STRING;
110     QString INITIAL_DOMAIN_BLOCKLIST_STRING;
111     QString REGULAR_EXPRESSION_BLOCKLIST_STRING;
112
113     // The private functions.
114     bool blockRequest(QWebEngineUrlRequestInfo &urlRequestInfo, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt, EntryStruct *entryStructPointer) const;
115     bool checkAppliedEntry(QWebEngineUrlRequestInfo &urlRequestInfo, UrlStruct &urlStruct, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt,
116                            EntryStruct *entryStructPointer, QString &urlString, QString &urlStringWithSeparators) const;
117     bool checkDomain(QWebEngineUrlRequestInfo &urlRequestInfo, UrlStruct &urlStruct, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt,
118                      EntryStruct *entryStructPointer) const;
119     bool checkIndividualList(QWebEngineUrlRequestInfo &urlRequestInfo, UrlStruct &urlStruct, RequestStruct *requestStructPointer, FilterListStruct *filterListStructPointer) const;
120     bool checkRegularExpression(QWebEngineUrlRequestInfo &urlRequestInfo, UrlStruct &urlStruct, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt,
121                                 EntryStruct *entryStructPointer) const;
122     bool checkRequestOptions(QWebEngineUrlRequestInfo &urlRequestInfo, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt,
123                              EntryStruct *entryStructPointer) const;
124     bool checkThirdParty(QWebEngineUrlRequestInfo &urlRequestInfo, RequestStruct *requestStructPointer, const bool isThirdPartyRequest, const QString &filterListTitle, const int sublistInt,
125                          EntryStruct *entryStructPointer) const;
126     FilterListStruct* populateFilterList(const QString &filterListFileName) const;
127     void populateRequestStruct(RequestStruct *requestStructPointer, const int disposition, const QString &filterListTitle, const int sublistInt, EntryStruct *entryStructPointer) const;
128     void prepareFilterListString(QString &filterListString, EntryStruct *entryStructPointer) const;
129 };
130 #endif