crowdsec: default ntfy ban-alert URL to a real hosted instance

Step 7 (ntfy ban alerts) always defaulted straight to the public
ntfy.sh, regardless of whether the box (or a homelab) already had a
real ntfy instance. Confusing in practice: this step runs before
asterisk-do's own ntfy extra is dispatched, so even selecting it
wouldn't have helped at prompt time.

Now checks the local ntfy install's own config/server.yml for a
configured base-url (skipping it if it's still the ntfy.sh-written
placeholder) and uses <base-url>/crowdsec-alerts as the default. If
there's no configured local instance, it says so explicitly and
prompts toward a hosted instance elsewhere (e.g. a homelab) instead of
silently assuming the public service. Verified all three cases
(configured local, unconfigured placeholder, none) in isolation, plus
a full regression run.
This commit is contained in:
Claude
2026-07-19 15:19:19 +00:00
parent 16a4985e04
commit 79b27a1594
+21 -1
View File
@@ -196,11 +196,31 @@ labels:
echo " https://app.crowdsec.net/"
# ── 7. Optional: push ban alerts to ntfy ─────────────────────────────────
echo ""
local CS_NTFY=""
prompt_yn "Send CrowdSec ban alerts to an ntfy topic? (y/n):" "n" CS_NTFY
if [ "$CS_NTFY" = "y" ] || [ "$CS_NTFY" = "Y" ]; then
# Prefer a locally-installed ntfy's own base-url as the default, if one
# exists and actually looks configured (not still the placeholder
# domain ntfy.sh writes when no SITE_DOMAIN was set at its own install
# time). Otherwise, nudge toward a hosted instance elsewhere (e.g. a
# homelab) instead of silently defaulting to the public ntfy.sh.
local _ntfy_default="https://ntfy.sh/crowdsec-alerts"
if [ -f "$DOCKER_DIR/ntfy/config/server.yml" ]; then
local _local_base_url
_local_base_url="$(grep -oP '(?<=base-url: ")[^"]+' "$DOCKER_DIR/ntfy/config/server.yml" 2>/dev/null || true)"
if [ -n "$_local_base_url" ] && [ "$_local_base_url" != "https://ntfy.example.com" ]; then
_ntfy_default="${_local_base_url}/crowdsec-alerts"
echo " Detected a configured local ntfy instance at $_local_base_url — using it as the default."
fi
fi
if [ "$_ntfy_default" = "https://ntfy.sh/crowdsec-alerts" ]; then
echo " No configured ntfy instance detected on this box. If you have one hosted"
echo " elsewhere (e.g. a homelab), enter its topic URL below instead of the public"
echo " ntfy.sh default — e.g. https://ntfy.your-homelab.com/crowdsec-alerts"
fi
local CS_NTFY_URL=""
prompt_text " ntfy topic URL (e.g. https://ntfy.sh/my-crowdsec):" "https://ntfy.sh/crowdsec-alerts" CS_NTFY_URL
prompt_text " ntfy topic URL:" "$_ntfy_default" CS_NTFY_URL
sudo mkdir -p /etc/crowdsec/notifications
local NTFY_FILE="/etc/crowdsec/notifications/ntfy.yaml"
local NTFY_CONTENT="type: http