diff --git a/operator_setup.sh b/operator_setup.sh index 935f565..566a73b 100755 --- a/operator_setup.sh +++ b/operator_setup.sh @@ -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)" "" - BB_ALERTER_WEBHOOK="$webhook_url" -else - BB_ALERTER_WEBHOOK="" + 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" + 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" \ - -H 'Content-Type: application/json' \ - -d "{\"text\":\"BigBrother ${BB_DEVICE_ID} online | ip: ${BB_IP} | host: ${BB_HOSTNAME}\"}" || true + _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\":\"${_BB_MSG}\"}" || true + fi fi echo "[+] First-boot complete: $(date)"