57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
|
import atexit
|
||
|
import logging
|
||
|
import os
|
||
|
import pathlib
|
||
|
import time
|
||
|
|
||
|
import requests
|
||
|
|
||
|
import config
|
||
|
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_path = "dnsmasq"
|
||
|
blocklist_lib_path = "/var/lib/starcontrol"
|
||
|
|
||
|
log.debug("preparing cache directories")
|
||
|
pth_cache_root = pathlib.Path(config.cparse["internal"]["cache_root"])
|
||
|
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)
|
||
|
|
||
|
def blocklist_check():
|
||
|
log.debug("checking blocklist mtimes and updating if needed")
|
||
|
try:
|
||
|
ts_payload = os.path.getmtime(pth_blocklist_lib / "dns-blocklists-main.zip")
|
||
|
ts_now = time.time()
|
||
|
if (ts_now - ts_payload) >= 604800:
|
||
|
update_blocklists()
|
||
|
except OSError:
|
||
|
update_blocklists()
|
||
|
|
||
|
def update_blocklists():
|
||
|
log.info("blocklist update in progress")
|
||
|
screen.download_state = 1
|
||
|
|
||
|
fd_listpayload = open(pth_blocklist_lib / "dns-blocklists-main.zip", "wb")
|
||
|
hnd_download = requests.get(blocklist_data_src, stream=True)
|
||
|
|
||
|
for chunk in hnd_download.iter_content(chunk_size=256):
|
||
|
fd_listpayload.write(chunk)
|
||
|
|
||
|
hnd_download.close()
|
||
|
fd_listpayload.close()
|
||
|
screen.download_state = 0
|
||
|
|
||
|
def blocklist_thread():
|
||
|
while running:
|
||
|
blocklist_check()
|
||
|
time.sleep(3600) # 1 hour
|
||
|
|
||
|
@atexit.register
|
||
|
def stop_blocklist():
|
||
|
global running
|
||
|
running = False
|