mirror of https://github.com/M66B/FairEmail.git
Improved Adguard rule parser
This commit is contained in:
parent
d7a81f2277
commit
f28a086090
|
@ -36,6 +36,7 @@ import java.util.regex.Pattern;
|
|||
public class Adguard {
|
||||
// https://github.com/AdguardTeam/AdguardFilters
|
||||
// https://github.com/AdguardTeam/FiltersRegistry/blob/master/filters/filter_17_TrackParam/filter.txt
|
||||
// https://github.com/AdguardTeam/TestCases/tree/master/public/Filters/removeparam-rules
|
||||
|
||||
private static final List<String> ADGUARD_IGNORE = Collections.unmodifiableList(Arrays.asList(
|
||||
"cookie", "font", "image", "media", "script", "subdocument", "stylesheet", "xmlhttprequest"
|
||||
|
@ -153,7 +154,10 @@ public class Adguard {
|
|||
break;
|
||||
}
|
||||
} else {
|
||||
if (!name.equals("document") &&
|
||||
if (!"document".equals(name) &&
|
||||
!"image".equals(name) &&
|
||||
!"important".equals(name) &&
|
||||
!"script".equals(name) &&
|
||||
!(name.startsWith("~") && !name.equals("~document"))) {
|
||||
if (!ADGUARD_IGNORE.contains(name))
|
||||
Log.w("Adguard ignoring=" + name);
|
||||
|
@ -269,12 +273,11 @@ public class Adguard {
|
|||
return true;
|
||||
}
|
||||
|
||||
if (remove.startsWith("~")) {
|
||||
// $removeparam=~param — removes all query parameters with the name different from param.
|
||||
// $removeparam=~/regexp/ — removes all query parameters that do not match the regexp regular expression.
|
||||
Log.w("Adguard not supported remove=" + remove);
|
||||
return false;
|
||||
}
|
||||
// $removeparam=~param — removes all query parameters with the name different from param.
|
||||
// $removeparam=~/regexp/ — removes all query parameters that do not match the regexp regular expression.
|
||||
boolean not = remove.startsWith("~");
|
||||
if (not)
|
||||
remove = remove.substring(1);
|
||||
|
||||
if (remove.startsWith("/")) {
|
||||
// $removeparam=/regexp/[options]
|
||||
|
@ -290,15 +293,18 @@ public class Adguard {
|
|||
String rest = remove.substring(end + 1);
|
||||
Log.i("Adguard regex=" + regex + " rest=" + rest);
|
||||
|
||||
if (!TextUtils.isEmpty(rest))
|
||||
int flags = 0;
|
||||
if ("i".equals(rest))
|
||||
flags = Pattern.CASE_INSENSITIVE;
|
||||
else if (!TextUtils.isEmpty(rest))
|
||||
Log.w("Adguard unexpected remove=" + remove);
|
||||
|
||||
String all = key + "=" + value;
|
||||
if (Pattern.compile(regex).matcher(all).find()) {
|
||||
if (Pattern.compile(regex, flags).matcher(all).find() ^ not) {
|
||||
Log.i("Adguard omit regex=" + regex);
|
||||
return true;
|
||||
}
|
||||
} else if (remove.equals(key)) {
|
||||
} else if (remove.equals(key) ^ not) {
|
||||
// $removeparam=param
|
||||
Log.i("Adguard omit key=" + key);
|
||||
return true;
|
||||
|
|
Loading…
Reference in New Issue