Standaloneupdaterdaemon

def download_update(url, dest_path): logging.info(f"Downloading update from url") r = requests.get(url, stream=True) with open(dest_path, "wb") as f: for chunk in r.iter_content(chunk_size=8192): f.write(chunk) return dest_path

def verify_signature(file_path, expected_signature_hex): # Simplified: compute SHA256 and compare with signed hash hasher = hashlib.sha256() with open(file_path, "rb") as f: for chunk in iter(lambda: f.read(4096), b""): hasher.update(chunk) computed_hash = hasher.hexdigest() return computed_hash == expected_signature_hex

stop_main_app() apply_update(package_path) update_local_version("version": remote["version"]) restart_main_app() logging.info("Update completed successfully") standaloneupdaterdaemon

if not verify_signature(package_path, remote["signature_hex"]): logging.error("Signature verification failed") return

def apply_update(package_path): # Example: unzip into install_directory import zipfile with zipfile.ZipFile(package_path, 'r') as zip_ref: zip_ref.extractall(CONFIG["install_directory"]) # Alternatively: run an installer .msi or .pkg logging.info("Update applied successfully") def download_update(url, dest_path): logging

def restart_main_app(): subprocess.Popen([CONFIG["main_app_executable"]], start_new_session=True)

def stop_main_app(): # Example: use pidfile or pkill try: subprocess.run(["pkill", "-f", CONFIG["main_app_executable"]], check=False) time.sleep(2) # give it time to exit except Exception as e: logging.warning(f"Could not stop main app: e") stream=True) with open(dest_path

download_update(remote["download_url"], package_path)

# Create temp dir Path(CONFIG["temp_download_dir"]).mkdir(parents=True, exist_ok=True) package_path = os.path.join(CONFIG["temp_download_dir"], "update_package.zip")

Scroll to Top