blob: 63901973a353c819d152a62c1d6da9bda2cae3c9 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#!/usr/bin/env bash
set -euo pipefail
client_home=/var/lib/n2usenet/nym
client_bin=/opt/n2usenet/bin/nym-socks5-client
check_bin=/opt/n2usenet/bin/n2u-check
gateway_db="$client_home/.nym/socks5-clients/n2usenet/data/gateways_registrations.sqlite"
backup_root=/var/lib/n2usenet-gateway-watch/backups
renew_before_seconds=86400
lock_file=/run/n2usenet-gateway-watch/lock
exec 9>"$lock_file"
if ! flock -n 9; then
exit 0
fi
for required in "$client_bin" "$check_bin" "$gateway_db" /etc/n2usenet/smtp-password; do
if [[ ! -e "$required" ]]; then
logger -t n2usenet-gateway-watch "required path is missing: $required"
exit 1
fi
done
expiry=$(sqlite3 "$gateway_db" "select d.expiration_timestamp from active_gateway a join remote_gateway_details d on d.gateway_id_bs58=a.active_gateway_id_bs58;")
if [[ -n "$expiry" ]]; then
expiry_epoch=$(date -u -d "$expiry" +%s)
now_epoch=$(date -u +%s)
if (( expiry_epoch - now_epoch > renew_before_seconds )); then
exit 0
fi
fi
stamp=$(date -u +%Y%m%dT%H%M%SZ)
backup_dir="$backup_root/$stamp"
install -d -m 0700 "$backup_dir"
restart_services() {
systemctl start n2usenet-socks.service || true
systemctl start n2usenet.service || true
}
trap restart_services EXIT
systemctl stop n2usenet.service n2usenet-socks.service
cp -a "$gateway_db" "$backup_dir/gateways_registrations.sqlite.before"
if ! runuser -u n2usenet -- "$client_bin" add-gateway --id n2usenet --set-active -o json; then
cp -a "$backup_dir/gateways_registrations.sqlite.before" "$gateway_db"
chown n2usenet:n2usenet "$gateway_db"
logger -t n2usenet-gateway-watch "gateway registration failed; previous state restored"
exit 1
fi
chown -R n2usenet:n2usenet "$client_home/.nym"
systemctl start n2usenet-socks.service
sleep 5
if ! "$check_bin" \
-socks 127.0.0.1:11080 \
-smtp 51.178.55.22:587 \
-tls-name mail.virebent.art \
-helo n2usenet.virebent.art \
-auth-user n2usenet@virebent.art \
-auth-password-file /etc/n2usenet/smtp-password \
-timeout 180s; then
systemctl stop n2usenet-socks.service
cp -a "$backup_dir/gateways_registrations.sqlite.before" "$gateway_db"
chown n2usenet:n2usenet "$gateway_db"
logger -t n2usenet-gateway-watch "new gateway failed transport verification; previous state restored"
exit 1
fi
systemctl start n2usenet.service
trap - EXIT
logger -t n2usenet-gateway-watch "gateway renewed and transport verification passed"
|