#!/usr/bin/python3 from config import * from lib_autopeer import * import os curs = DB.execute('SELECT name, asn FROM peers WHERE deleted=0') while row := curs.fetchone(): name, asn = row print(f'Processing {asn}-{name}...') birdcfg = open(f'/etc/bird/peers/as{asn}{name}.conf', 'w') old_umask = os.umask(0o077) wgcfg = open(f'/etc/wireguard/wg{asn%10000:04}{name}.conf', 'w') os.umask(old_umask) print(_bird_config(name, _get_peer_info(name, asn), _get_my_info(asn)), file=birdcfg) print(_wg_config(name, _get_peer_info(name, asn), _get_my_info(asn)), file=wgcfg) birdcfg.close() wgcfg.close() os.system(f'systemctl enable --now wg-quick@wg{asn%10000:04}{name}') curs.close() curs = DB.execute('SELECT name, asn FROM peers WHERE deleted=1') deletions = [] while row := curs.fetchone(): name, asn = row print(f'Deleting {asn}-{name}...') os.system(f'systemctl disable --now wg-quick@wg{asn%10000:04}{name}') try: os.remove(f'/etc/bird/peers/as{asn}{name}.conf') except FileNotFoundError: pass try: os.remove(f'/etc/wireguard/wg{asn%10000:04}{name}.conf') except FileNotFoundError: pass deletions.append((name, asn)) curs.close() for name, asn in deletions: DB.execute('DELETE FROM peers WHERE name = :name AND asn = :asn', dict(name=name, asn=asn)) os.system('/usr/sbin/birdc configure')