summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xautopeer_shell.py4
-rwxr-xr-xcronjob.py12
-rwxr-xr-xinstall.sh2
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