You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

34 lines
1.2 KiB
Python

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)