import hashlib from time import sleep import yaml import requests from pathlib import Path from wgconfig import WireGuardConfig, wg_showconf, wg_syncconf cfg = yaml.safe_load(Path(__file__).with_suffix(".conf").read_text()) last_hash = "" last_local_hash = "" url = f"{cfg['url']}/hash/{cfg['remote_wg']}" urlpat2 = f"{cfg['url']}/peers/{cfg['remote_wg']}" while True: new_hash = requests.get(url).text new_local_hash = hashlib.sha256(wg_showconf( cfg["local_wg"]).encode()).hexdigest() if last_hash != new_hash or last_local_hash != new_local_hash: print(f"update hash to {new_hash}") print(f"update local_hash to {new_local_hash}") local_cfg = WireGuardConfig.get_from_interface(cfg["local_wg"]) for peer in cfg["peers"]: if p := local_cfg.get_peer(peer): url2 = f"{urlpat2}/{peer}" res = requests.get( url2, cert=("client1.crt", "client1.key"), verify=False, ).json() p["Endpoint"] = res["Endpoint"] wg_syncconf(cfg["local_wg"], str(local_cfg)) last_hash = new_hash last_local_hash = new_local_hash sleep(5)