master
大蒟蒻 4 years ago
parent db0fef1cde
commit 921ae66e6d

@ -5,35 +5,36 @@ import requests
from pathlib import Path
from wgconfig import WireGuardConfig, wg_showconf, wg_syncconf
def local_hash(ifname: str):
return hashlib.sha256(wg_showconf(ifname).encode()).hexdigest()
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']}"
with requests.Session() as sess:
sess.verify = "ca.crt"
sess.cert = ("client1.crt", "client1.key")
while True:
new_hash = requests.get(
url,
cert=("client1.crt", "client1.key"),
verify="ca.crt",
).text
new_local_hash = hashlib.sha256(wg_showconf(
cfg["local_wg"]).encode()).hexdigest()
try:
new_hash = sess.get(url).text
new_local_hash = local_hash(cfg["local_wg"])
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="ca.crt",
).json()
res = sess.get(url2).json()
p["Endpoint"] = res["Endpoint"]
wg_syncconf(cfg["local_wg"], str(local_cfg))
new_local_hash = hashlib.sha256(wg_showconf(
cfg["local_wg"]).encode()).hexdigest()
new_local_hash = local_hash(cfg["local_wg"])
print(f"update local_hash to {new_local_hash}")
last_hash = new_hash
last_local_hash = new_local_hash
except Exception as ex:
print(ex)
sleep(5)

Loading…
Cancel
Save