#!/usr/bin/env bash
#
# Тестовая отправка Entrixy-webhook на ваш эндпоинт.
# Подписывает запрос HMAC-SHA256 как это делает приложение.
#
# Использование:
#   ./test-webhook.sh https://your-host/webhook YOUR_SECRET
#   ./test-webhook.sh https://your-host/webhook YOUR_SECRET h42 close
#
# Аргументы:
#   $1  URL эндпоинта (обязательный)
#   $2  секрет (обязательный)
#   $3  object_id (опционально, по умолчанию "h1")
#   $4  action    (опционально, по умолчанию "open")
#
# Зависимости: bash, curl, openssl. Всё что есть в любом Linux/macOS.

set -e

URL="${1:?URL не указан. Пример: $0 https://host/webhook SECRET}"
SECRET="${2:?Секрет не указан}"
OBJECT_ID="${3:-h1}"
ACTION="${4:-open}"

TIMESTAMP=$(date +%s)
# nonce: 16 байт hex из /dev/urandom (UUID-аналог без зависимостей)
NONCE=$(head -c 16 /dev/urandom | xxd -p)

BASE="${TIMESTAMP}.${NONCE}.${ACTION}.${OBJECT_ID}"
SIGNATURE=$(printf '%s' "$BASE" | openssl dgst -sha256 -hmac "$SECRET" | sed 's/^.* //')

PAYLOAD=$(cat <<EOF
{
  "timestamp": ${TIMESTAMP},
  "nonce": "${NONCE}",
  "action": "${ACTION}",
  "object_id": "${OBJECT_ID}",
  "signature": "${SIGNATURE}"
}
EOF
)

echo "→ POST $URL"
echo "→ payload: $PAYLOAD"
echo

RESPONSE=$(curl -sS -w '\nHTTP %{http_code}\n' \
    -H 'Content-Type: application/json' \
    -d "$PAYLOAD" \
    "$URL")

echo "← $RESPONSE"
