Proper Matrix alerter support with client API
Matrix doesn't use a simple webhook URL — needs homeserver, room ID, and bot token separately. Uses PUT /_matrix/client/v3/rooms/.../send with Bearer token auth. Room ID is bash-encoded (! → %21, : → %3A) to avoid Python dependency pre-setup. Also adds ntfy and plain webhook as options under a typed alerter menu.
This commit is contained in:
+54
-10
@@ -374,12 +374,34 @@ fi
|
||||
|
||||
# Network alerter webhook
|
||||
step "Network Alerter"
|
||||
prompt_default enable_alerter "Enable alerter webhook? (y/n)" "n"
|
||||
prompt_default enable_alerter "Enable online alert? (y/n)" "n"
|
||||
BB_ALERTER_TYPE=""
|
||||
BB_ALERTER_WEBHOOK=""
|
||||
BB_ALERTER_MATRIX_HS=""
|
||||
BB_ALERTER_MATRIX_ROOM=""
|
||||
BB_ALERTER_MATRIX_TOKEN=""
|
||||
if [[ "$enable_alerter" =~ ^[yY]$ ]]; then
|
||||
prompt_default webhook_url "Webhook URL (Slack/Discord/Matrix)" ""
|
||||
echo " [1] Matrix"
|
||||
echo " [2] Slack / Discord (webhook URL)"
|
||||
echo " [3] ntfy"
|
||||
prompt_default alerter_type "Alerter type (1-3)" "1"
|
||||
if [[ "$alerter_type" == "1" ]]; then
|
||||
BB_ALERTER_TYPE="matrix"
|
||||
prompt_default matrix_hs "Homeserver URL" "https://m.example.org"
|
||||
prompt_default matrix_room "Room ID (e.g. !abc123:homeserver)" ""
|
||||
prompt_default matrix_token "Bot access token" ""
|
||||
BB_ALERTER_MATRIX_HS="$matrix_hs"
|
||||
BB_ALERTER_MATRIX_ROOM="$matrix_room"
|
||||
BB_ALERTER_MATRIX_TOKEN="$matrix_token"
|
||||
elif [[ "$alerter_type" == "2" ]]; then
|
||||
BB_ALERTER_TYPE="webhook"
|
||||
prompt_default webhook_url "Webhook URL" ""
|
||||
BB_ALERTER_WEBHOOK="$webhook_url"
|
||||
else
|
||||
BB_ALERTER_WEBHOOK=""
|
||||
elif [[ "$alerter_type" == "3" ]]; then
|
||||
BB_ALERTER_TYPE="ntfy"
|
||||
prompt_default ntfy_url "ntfy topic URL" ""
|
||||
BB_ALERTER_WEBHOOK="$ntfy_url"
|
||||
fi
|
||||
fi
|
||||
|
||||
# ══════════════════════════════════════════════════════════════════════════════
|
||||
@@ -405,7 +427,7 @@ if [[ "$BB_VPN" == "autossh" ]]; then
|
||||
else
|
||||
echo "VPN: ${BOLD}${BB_VPN}${NC}"
|
||||
fi
|
||||
echo "Alerter: ${BOLD}$([ -n "$BB_ALERTER_WEBHOOK" ] && echo "enabled" || echo "disabled")${NC}"
|
||||
echo "Alerter: ${BOLD}$([ -n "$BB_ALERTER_TYPE" ] && echo "$BB_ALERTER_TYPE" || echo "disabled")${NC}"
|
||||
echo ""
|
||||
|
||||
echo -n -e "${CYAN}Proceed with flashing and configuration? (y/n):${NC} "
|
||||
@@ -550,9 +572,17 @@ BB_VPN="${BB_VPN}"
|
||||
BB_DEVICE_ID="${DEVICE_ID}"
|
||||
EOF
|
||||
|
||||
if [[ -n "$BB_ALERTER_TYPE" ]]; then
|
||||
echo "BB_ALERTER_TYPE=\"${BB_ALERTER_TYPE}\"" >> "${MOUNT_POINT}/root/bb-config.env"
|
||||
fi
|
||||
if [[ -n "$BB_ALERTER_WEBHOOK" ]]; then
|
||||
echo "BB_ALERTER_WEBHOOK=\"${BB_ALERTER_WEBHOOK}\"" >> "${MOUNT_POINT}/root/bb-config.env"
|
||||
fi
|
||||
if [[ -n "$BB_ALERTER_MATRIX_HS" ]]; then
|
||||
echo "BB_ALERTER_MATRIX_HS=\"${BB_ALERTER_MATRIX_HS}\"" >> "${MOUNT_POINT}/root/bb-config.env"
|
||||
echo "BB_ALERTER_MATRIX_ROOM=\"${BB_ALERTER_MATRIX_ROOM}\"" >> "${MOUNT_POINT}/root/bb-config.env"
|
||||
echo "BB_ALERTER_MATRIX_TOKEN=\"${BB_ALERTER_MATRIX_TOKEN}\"" >> "${MOUNT_POINT}/root/bb-config.env"
|
||||
fi
|
||||
|
||||
# Store Tailscale auth key if needed
|
||||
if [[ "$BB_VPN" == "tailscale" && -n "$TAILSCALE_KEY" ]]; then
|
||||
@@ -664,13 +694,27 @@ SVCEOF
|
||||
fi
|
||||
|
||||
# Network alerter
|
||||
if [[ -n "${BB_ALERTER_WEBHOOK:-}" ]]; then
|
||||
if [[ -n "${BB_ALERTER_TYPE:-}" ]]; then
|
||||
echo "[*] Sending online alert..."
|
||||
BB_IP=$(curl -sf --max-time 5 https://api.ipify.org 2>/dev/null || hostname -I | awk '{print $1}')
|
||||
BB_HOSTNAME=$(hostname)
|
||||
curl -sf -X POST "$BB_ALERTER_WEBHOOK" \
|
||||
_BB_IP=$(curl -sf --max-time 5 https://api.ipify.org 2>/dev/null || hostname -I | awk '{print $1}')
|
||||
_BB_MSG="${BB_DEVICE_ID} online | ip: ${_BB_IP} | host: $(hostname)"
|
||||
|
||||
if [[ "${BB_ALERTER_TYPE}" == "matrix" ]]; then
|
||||
_TXNID=$(date +%s%N)
|
||||
_ROOM="${BB_ALERTER_MATRIX_ROOM//!/%21}"
|
||||
_ROOM="${_ROOM//:/%3A}"
|
||||
curl -sf -X PUT \
|
||||
"${BB_ALERTER_MATRIX_HS}/_matrix/client/v3/rooms/${_ROOM}/send/m.room.message/${_TXNID}" \
|
||||
-H "Authorization: Bearer ${BB_ALERTER_MATRIX_TOKEN}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"msgtype\":\"m.text\",\"body\":\"${_BB_MSG}\"}" || true
|
||||
elif [[ "${BB_ALERTER_TYPE}" == "ntfy" ]]; then
|
||||
curl -sf -X POST "${BB_ALERTER_WEBHOOK}" -d "${_BB_MSG}" || true
|
||||
else
|
||||
curl -sf -X POST "${BB_ALERTER_WEBHOOK}" \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d "{\"text\":\"BigBrother ${BB_DEVICE_ID} online | ip: ${BB_IP} | host: ${BB_HOSTNAME}\"}" || true
|
||||
-d "{\"text\":\"${_BB_MSG}\"}" || true
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "[+] First-boot complete: $(date)"
|
||||
|
||||
Reference in New Issue
Block a user