This commit is contained in:
Adrian Miller 2023-01-09 16:28:20 +11:00 committed by GitHub
commit f47d37285d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 4 deletions

Binary file not shown.

View File

@ -7,6 +7,9 @@ import argparse
import re import re
import sys import sys
#added domain_list variable
domain_list = []
try: try:
import urllib2 as urllib import urllib2 as urllib
@ -183,9 +186,9 @@ def allowlist_from_url(url):
names, _time_restrictions = parse_list(content, trusted) names, _time_restrictions = parse_list(content, trusted)
return names return names
#added sort arg
def blocklists_from_config_file( def blocklists_from_config_file(
file, allowlist, time_restricted_url, ignore_retrieval_failure file, allowlist, time_restricted_url, ignore_retrieval_failure, sort
): ):
blocklists = {} blocklists = {}
allowed_names = set() allowed_names = set()
@ -241,6 +244,7 @@ def blocklists_from_config_file(
print("\n# Blocklist from [{}]".format(url)) print("\n# Blocklist from [{}]".format(url))
ignored, allowed = 0, 0 ignored, allowed = 0, 0
list_names = list() list_names = list()
for name in names: for name in names:
if has_suffix(all_names, name) or name in unique_names or covered_by_regex(name, all_regexes): if has_suffix(all_names, name) or name in unique_names or covered_by_regex(name, all_regexes):
ignored = ignored + 1 ignored = ignored + 1
@ -255,8 +259,29 @@ def blocklists_from_config_file(
print("# Ignored duplicates: {}".format(ignored)) print("# Ignored duplicates: {}".format(ignored))
if allowed: if allowed:
print("# Ignored entries due to the allowlist: {}".format(allowed)) print("# Ignored entries due to the allowlist: {}".format(allowed))
# added list_names = sorted(set(list_names)) to sort domains
list_names = sorted(set(list_names))
for name in list_names: for name in list_names:
print(name) #commented out print(name) below
#print(name)
#added domain_list.append(name) below
domain_list.append(name)
#added domain/tld sorting function below
data = []
for x in domain_list:
d = x.strip().split('.')
d.reverse()
data.append(d)
#if -s tld / --sort tld commandline arg used then sort via tld
if args.sort == 'tld':
data.sort()
#otherwise sort via domain
else:
data.sort(key=lambda x: x[1:])
for y in data:
y.reverse()
print('.'.join(y))
argp = argparse.ArgumentParser( argp = argparse.ArgumentParser(
@ -293,6 +318,15 @@ argp.add_argument(
) )
argp.add_argument("-t", "--timeout", default=30, help="URL open timeout") argp.add_argument("-t", "--timeout", default=30, help="URL open timeout")
#added argp.add_argument for sort commandline option
argp.add_argument(
"-s",
"--sort",
default="domain",
help="sort method, either: none = domain (default) or tld",
)
args = argp.parse_args() args = argp.parse_args()
whitelist = args.whitelist whitelist = args.whitelist
@ -305,5 +339,9 @@ allowlist = args.allowlist
time_restricted = args.time_restricted time_restricted = args.time_restricted
ignore_retrieval_failure = args.ignore_retrieval_failure ignore_retrieval_failure = args.ignore_retrieval_failure
#added sort to arg list
sort = args.sort
#added sort to arg list
blocklists_from_config_file( blocklists_from_config_file(
conf, allowlist, time_restricted, ignore_retrieval_failure) conf, allowlist, time_restricted, ignore_retrieval_failure, sort)