blocklist management work
This commit is contained in:
parent
1d23029591
commit
93b46a9c48
@ -13,10 +13,13 @@
|
||||
# limitations under the License.
|
||||
|
||||
import atexit
|
||||
import fnmatch
|
||||
import logging
|
||||
import os
|
||||
import pathlib
|
||||
import shutil
|
||||
import time
|
||||
import zipfile
|
||||
|
||||
import requests
|
||||
|
||||
@ -26,7 +29,7 @@ import screen
|
||||
log = logging.getLogger("blocklists")
|
||||
running = True
|
||||
|
||||
blocklist_data_src = "https://github.com/hagezi/dns-blocklists/archive/refs/heads/main.zip"
|
||||
blocklist_data_src = "https://github.com/hagezi/dns-blocklists/archive/refs/tags/2024.310.16385.zip"
|
||||
blocklist_data_src_path = "dnsmasq"
|
||||
blocklist_lib_path = "/var/lib/starcontrol"
|
||||
|
||||
@ -36,6 +39,8 @@ pth_cache_root.mkdir(exist_ok=True, parents=True)
|
||||
pth_blocklist_lib = pathlib.Path(blocklist_lib_path)
|
||||
pth_blocklist_lib.mkdir(exist_ok=True, parents=True)
|
||||
|
||||
deploy_pending = False
|
||||
|
||||
def blocklist_check():
|
||||
log.debug("checking blocklist mtimes and updating if needed")
|
||||
try:
|
||||
@ -47,6 +52,8 @@ def blocklist_check():
|
||||
update_blocklists()
|
||||
|
||||
def update_blocklists():
|
||||
global deploy_pending
|
||||
|
||||
log.info("blocklist update in progress")
|
||||
screen.download_state = 1
|
||||
|
||||
@ -59,11 +66,46 @@ def update_blocklists():
|
||||
hnd_download.close()
|
||||
fd_listpayload.close()
|
||||
screen.download_state = 0
|
||||
deploy_pending = True
|
||||
|
||||
def build_dnsmasq_file():
|
||||
with open(pth_cache_root / "dnsmasq.conf", "w") as cfg_dnsmasq:
|
||||
for server in list(config.cparse["upstreams"].keys()):
|
||||
cfg_dnsmasq.write(f"server={server}\n")
|
||||
|
||||
for blocklist in list(config.cparse["enabled_lists"].keys()):
|
||||
listpath = pth_cache_root / f"lists/{blocklist}.txt"
|
||||
if listpath.exists():
|
||||
cfg_dnsmasq.write(f"conf-file={listpath.as_posix()}\n")
|
||||
|
||||
def deploy_blocklists():
|
||||
global deploy_pending
|
||||
|
||||
with zipfile.ZipFile(pth_blocklist_lib / "dns-blocklists-main.zip") as zip_blocklists:
|
||||
for item in fnmatch.filter(zip_blocklists.namelist(), "dns-blocklists-main/dnsmasq/*"):
|
||||
basename = os.path.basename(item)
|
||||
if not basename:
|
||||
continue # skips raw directories
|
||||
|
||||
fd_source = zip_blocklists.open(item)
|
||||
fd_destination = open(pth_cache_root / f"lists/{basename}", "wb")
|
||||
with fd_source, fd_destination:
|
||||
shutil.copyfileobj(fd_source, fd_destination)
|
||||
|
||||
deploy_pending = False
|
||||
|
||||
def blocklist_thread():
|
||||
sz_blocklist_check_timer = 0
|
||||
while running:
|
||||
blocklist_check()
|
||||
time.sleep(3600) # 1 hour
|
||||
if sz_blocklist_check_timer >= 3600: # 1 hour
|
||||
blocklist_check()
|
||||
sz_blocklist_check_timer = 0
|
||||
else:
|
||||
sz_blocklist_check_timer += 1
|
||||
|
||||
if deploy_pending:
|
||||
deploy_blocklists()
|
||||
time.sleep(1)
|
||||
|
||||
@atexit.register
|
||||
def stop_blocklist():
|
||||
|
44
config.ini
44
config.ini
@ -1,2 +1,44 @@
|
||||
[internal]
|
||||
cache_root=/run/starcontrol
|
||||
cache_root=/run/starcontrol
|
||||
|
||||
[enabled_lists]
|
||||
; anti.piracy =
|
||||
; doh-vpn-proxy-bypass =
|
||||
; doh =
|
||||
; dyndns =
|
||||
; fake =
|
||||
; gambling.medium =
|
||||
; gambling.mini =
|
||||
; gambling =
|
||||
; hoster =
|
||||
; light =
|
||||
; multi =
|
||||
; native.amazon =
|
||||
; native.apple =
|
||||
; native.huawei =
|
||||
; native.lgwebos =
|
||||
; native.oppo-realme =
|
||||
; native.samsung =
|
||||
; native.tiktok.extend =
|
||||
; native.tiktok =
|
||||
; native.vivo =
|
||||
; native.winoffice =
|
||||
; native.xiaomi =
|
||||
; nosafesearch =
|
||||
; popupads =
|
||||
; pro.mini =
|
||||
; pro.plus.mini =
|
||||
; pro.plus =
|
||||
pro =
|
||||
; tif-ips =
|
||||
; tif.medium =
|
||||
; tif.mini =
|
||||
tif =
|
||||
; ultimate.mini =
|
||||
; ultimate =
|
||||
|
||||
[upstreams] # one per line
|
||||
1.1.1.1
|
||||
1.0.0.1
|
||||
8.8.8.8
|
||||
8.8.4.4
|
@ -18,5 +18,5 @@ import logging
|
||||
log = logging.getLogger("main")
|
||||
|
||||
log.debug("reading configuration file")
|
||||
cparse = configparser.ConfigParser()
|
||||
cparse = configparser.ConfigParser(allow_no_value=True)
|
||||
cparse.read("config.ini")
|
@ -37,6 +37,15 @@ if __name__ == "__main__":
|
||||
img_canvas.paste(Image.open("res/image/hourglass.png"),(math.floor(135/2) - math.ceil(49/2),math.floor(240/2) - math.ceil(90/2)))
|
||||
screen.scr.image(img_canvas)
|
||||
|
||||
if not (blocklists.pth_blocklist_lib / "dns-blocklists-main.zip").exists():
|
||||
blocklists.update_blocklists()
|
||||
|
||||
if not (blocklists.pth_cache_root / "lists").exists():
|
||||
(blocklists.pth_cache_root / "lists").mkdir()
|
||||
blocklists.deploy_blocklists()
|
||||
|
||||
blocklists.build_dnsmasq_file()
|
||||
|
||||
thr_blocklists = threading.Thread(target=blocklists.blocklist_thread)
|
||||
thr_screen = threading.Thread(target=screen.screen_thread)
|
||||
thr_blocklists.start()
|
||||
|
Loading…
Reference in New Issue
Block a user