48 lines
1.5 KiB
Text
Executable file
48 lines
1.5 KiB
Text
Executable file
#!/usr/bin/with-contenv bashio
|
|
# ==============================================================================
|
|
# Home Assistant Third Party Add-on: WireGuard Client
|
|
# Provides status of WireGuard broker.
|
|
# ==============================================================================
|
|
declare -a peers
|
|
declare endpoint
|
|
declare json
|
|
declare latest_handshake
|
|
declare line
|
|
declare peer
|
|
declare transfer_rx
|
|
declare transfer_tx
|
|
|
|
PORT=$(bashio::addon.port "80/tcp")
|
|
if [[ $PORT -eq 0 ]]; then exit; fi
|
|
|
|
while true; do
|
|
# Get information from wg
|
|
peers=()
|
|
declare count=1
|
|
while IFS=$'\t' read -r -a line; do
|
|
if [[ "${#line[@]}" -gt 6 ]]; then
|
|
endpoint="${line[3]}"
|
|
latest_handshake="$(exec date -d @"${line[5]}" 2>/dev/null || date -r "${line[5]}")"
|
|
transfer_rx="${line[6]}"
|
|
transfer_tx="${line[7]}"
|
|
|
|
peer=$(bashio::var.json \
|
|
'endpoint' "${endpoint}" \
|
|
'latest_handshake' "${latest_handshake}" \
|
|
'transfer_rx' "^${transfer_rx}" \
|
|
'transfer_tx' "^${transfer_tx}")
|
|
|
|
peers+=("peer_${count}" "^${peer}")
|
|
(( count++ ))
|
|
fi
|
|
done <<< "$(wg show all dump)"
|
|
|
|
# Build final json content
|
|
json="{}"
|
|
if [[ "${#peers[@]}" -ne 0 ]]; then
|
|
json=$(bashio::var.json "${peers[@]}")
|
|
fi
|
|
|
|
echo -e "HTTP/1.1 200 OK\r\nContent-type: application/json\r\n\r\n${json}" \
|
|
| nc -l -p $PORT > /dev/null
|
|
done
|