33 lines
1.3 KiB
Bash
Executable File
33 lines
1.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# FILE: fed/peer/del
|
|
# DESCRIPTION: Delete a peer from a federated server
|
|
# USAGE: del $remote_ip $querystring
|
|
# QUERYSTRING: ?secret=$secret&pubkey=$pubkey
|
|
|
|
source /etc/wagon/config
|
|
ip="${1}"; qs="$(<<<"${2}" tr '&' '\n' | sed 's/?//')"
|
|
secret="$(<<<"${qs}" grep -oP 'secret=(.*)' | sed 's/^secret=//' | xargs)"
|
|
pubkey="$(<<<"${qs}" grep -oP 'pubkey=(.*)' | sed 's/^pubkey=//' | xargs)"
|
|
|
|
# Check that requesting ip is in the servers file
|
|
if ! sed '/^#/d' /etc/wagon/servers | cut -f2,3 | grep -qw "${ip}"; then
|
|
printf "ERROR! Federated server %s requested to create new peer but isn't in servers file!/n" "${ip}" >&2
|
|
/usr/lib/wagon/http_res 403; exit
|
|
fi
|
|
|
|
# Check server secret
|
|
local_secret="$(grep -w "^${LOCAL_SERVER}" /etc/wagon/servers | cut -f7)"
|
|
if ! [ "${local_secret}" == "${secret}" ]; then
|
|
printf "ERROR! Federated server %s provided a secret, %s, that doesn't match the one in our servers file, %s\n" "${ip}" "${secret}" "${local_secret}" >&2
|
|
/usr/lib/wagon/http_res 403; exit
|
|
fi
|
|
|
|
# Delete peer from wireguard
|
|
if /usr/lib/wagon/wg_peer_del "${pubkey}"; then
|
|
printf 'Deleted %s from wireguard.\n' "${pubkey}" >&2
|
|
else
|
|
printf 'ERROR! Failed to delete %s from wireguard!\n' "${pubkey}" >&2
|
|
/usr/lib/wagon/http_res 500; exit
|
|
fi
|
|
|
|
/usr/lib/wagon/http_res 200 |