From 548bafebf16cb5a5a392d7bfa1d08e6cc2e5923e Mon Sep 17 00:00:00 2001 From: steering7253 Date: Fri, 10 Apr 2026 15:55:34 +0000 Subject: properly support deleting --- autopeer_shell.py | 4 ++-- cronjob.py | 12 +++++++++++- install.sh | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/autopeer_shell.py b/autopeer_shell.py index 2c6eac4..1e13b71 100755 --- a/autopeer_shell.py +++ b/autopeer_shell.py @@ -118,7 +118,7 @@ class AutopeerShell(cmd.Cmd): try: curs = DB.execute( - 'INSERT INTO peers (name, asn, pubkey, endpoint, port, ipll, creator_ip, creator_name, creator_date) VALUES (:name, :asn, :pubkey, :endpoint, :port, :ipll, :creator_ip, :creator_name, :creator_date)', + 'INSERT INTO peers (name, asn, pubkey, endpoint, port, ipll, creator_ip, creator_name, creator_date, deleted) VALUES (:name, :asn, :pubkey, :endpoint, :port, :ipll, :creator_ip, :creator_name, :creator_date, 0)', dict(name=name, asn=SELECTED_ASN, pubkey=pubkey, endpoint=endpoint, port=port, ipll=ipll, creator_ip=os.getenv('SSH_CONNECTION'), creator_name=USER, creator_date=time.time()) ) except sqlite3.IntegrityError as e: @@ -141,7 +141,7 @@ class AutopeerShell(cmd.Cmd): Delete your peering''' sp = subprocess.run(['socat', 'stdio', NOTIFY_TO], input=f"[autopeer {socket.gethostname()}] Deleted peering {name!r} for AS{SELECTED_ASN} by {USER}", text=True) curs = DB.execute( - 'DELETE FROM peers WHERE name = :name AND asn = :asn', + 'UPDATE peers SET deleted = 1 WHERE name = :name AND asn = :asn AND deleted = 0', dict(name=name, asn=SELECTED_ASN) ) if curs.rowcount: diff --git a/cronjob.py b/cronjob.py index 81b5497..14061b9 100755 --- a/cronjob.py +++ b/cronjob.py @@ -6,7 +6,7 @@ from lib_autopeer import * import os -curs = DB.execute('SELECT name, asn FROM peers') +curs = DB.execute('SELECT name, asn FROM peers WHERE deleted=0') while row := curs.fetchone(): name, asn = row print(f'Processing {asn}-{name}...') @@ -20,4 +20,14 @@ while row := curs.fetchone(): wgcfg.close() os.system(f'systemctl enable --now wg-quick@wg{asn%10000:04}{name}') +curs = DB.execute('SELECT name, asn FROM peers WHERE deleted=1') +while row := curs.fetchone(): + name, asn = row + print(f'Deleting {asn}-{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 + os.system(f'systemctl disable --now wg-quick@wg{asn%10000:04}{name}') + os.system('birdc configure') diff --git a/install.sh b/install.sh index 01ee7f3..34a5fd8 100755 --- a/install.sh +++ b/install.sh @@ -18,7 +18,7 @@ echo '0 * * * * root git -C /opt/autopeer pull' >>/etc/cron.d/autopeer umask 0007 mkdir /opt/autopeer/db -echo 'CREATE TABLE peers (name, asn, ipll, endpoint, port, pubkey, creator_ip, creator_name, creator_date, primary key (name, asn));' | python3 -m sqlite3 /opt/autopeer/db/sqlite3.db +echo 'CREATE TABLE peers (name, asn, ipll, endpoint, port, pubkey, creator_ip, creator_name, creator_date, deleted, primary key (name, asn));' | python3 -m sqlite3 /opt/autopeer/db/sqlite3.db chgrp -R autopeer /opt/autopeer/db/ umask 0077 -- cgit v1.3.1-10-gc9f91