dotfiles/scripts/send-ntfy
rpriven 5b6af65def
Organize scripts and clean up dotfiles
Changes:
- Added 80+ scripts with organized structure
  - payloads/ for third-party pentesting tools
  - pentesting/ for custom security scripts
  - Daily drivers remain flat for fast access
- Converted wes() function to proper script
- Removed .sh extensions from pentesting scripts
- Cleaned up aliases (removed 31 redundant lines)
- Added kanata/, build artifacts to gitignore
- Removed old fre.sh scripts and empty a.out
- Updated configs: helix, tmux, zsh, ulauncher, redshift

Security: All sensitive data excluded via gitignore
2025-11-07 14:48:21 -07:00

84 lines
1.9 KiB
Bash
Executable file

#!/bin/bash
# send-ntfy - Send notification via ntfy using credentials from ~/.env
set -euo pipefail
# Load credentials from ~/.env
if [ -f "$HOME/.env" ]; then
set -a
source "$HOME/.env"
set +a
else
echo "Error: ~/.env not found" >&2
exit 1
fi
# Check for URL
if [ -z "${NTFY_URL:-}" ]; then
echo "Error: NTFY_URL must be set in ~/.env" >&2
exit 1
fi
# Add https:// if missing
if [[ ! "$NTFY_URL" =~ ^https?:// ]]; then
NTFY_URL="https://$NTFY_URL"
fi
# Parse arguments
TOPIC="${1:-alerts}"
MESSAGE="${2:-}"
TITLE="${3:-}"
PRIORITY="${4:-default}"
TAGS="${5:-}"
if [ -z "$MESSAGE" ]; then
echo "Usage: send-ntfy <topic> <message> [title] [priority] [tags]" >&2
echo "" >&2
echo "Examples:" >&2
echo " send-ntfy alerts 'Backup completed'" >&2
echo " send-ntfy security 'Suspicious login' 'Security Alert' urgent 'warning,shield'" >&2
echo " send-ntfy personal 'Meeting in 5 minutes'" >&2
exit 1
fi
# Build full URL with topic
FULL_URL="$NTFY_URL/$TOPIC"
# Build curl options array
CURL_OPTS=(
-s
--http1.1
-w "\n%{http_code}"
-d "$MESSAGE"
)
# Add authentication
if [ -n "${NTFY_TOKEN:-}" ]; then
CURL_OPTS+=(-H "Authorization: Bearer $NTFY_TOKEN")
elif [ -n "${NTFY_AUTH:-}" ]; then
CURL_OPTS+=(-u "$NTFY_AUTH")
else
echo "Error: NTFY_TOKEN or NTFY_AUTH must be set in ~/.env" >&2
exit 1
fi
# Add optional headers
[ -n "$TITLE" ] && CURL_OPTS+=(-H "Title: $TITLE")
[ -n "$PRIORITY" ] && CURL_OPTS+=(-H "Priority: $PRIORITY")
[ -n "$TAGS" ] && CURL_OPTS+=(-H "Tags: $TAGS")
# Send notification
RESULT=$(curl "${CURL_OPTS[@]}" "$FULL_URL" 2>&1)
# Extract HTTP code
HTTP_CODE=$(echo "$RESULT" | tail -1)
RESPONSE=$(echo "$RESULT" | sed '$d')
if [ "$HTTP_CODE" = "200" ]; then
echo "✅ Notification sent to $TOPIC"
exit 0
else
echo "❌ Failed: HTTP $HTTP_CODE" >&2
[ -n "$RESPONSE" ] && echo "Response: $RESPONSE" >&2
exit 1
fi