# Copyright © 2024 Nicole O'Connor # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. 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