#!/bin/bash
# PreToolUse Hook: блокирует опасные Bash-команды
# Exit 0 = разрешить, Exit 2 + JSON = заблокировать

INPUT=$(cat)
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty')

if [ -z "$COMMAND" ]; then
    exit 0
fi

# Список опасных паттернов
DANGEROUS_PATTERNS=(
    'rm\s+-[a-zA-Z]*r[a-zA-Z]*f[a-zA-Z]*\s+/'       # rm -rf /
    'rm\s+-[a-zA-Z]*f[a-zA-Z]*r[a-zA-Z]*\s+/'       # rm -fr /
    'rm\s+-rf\s+/\*'                                   # rm -rf /*
    'mkfs\.'                                            # mkfs.ext4 и т.д.
    'dd\s+.*of=/dev/'                                   # dd запись на устройство
    '>\s*/dev/sd'                                       # перезапись диска
    'chmod\s+-R\s+777\s+/'                             # chmod -R 777 /
    'chown\s+-R\s+.*\s+/'                              # chown -R ... /
    ':\(\)\s*\{\s*:\|:\s*&\s*\}'                       # fork bomb
    '(^|[;|&]\s*|sudo\s+)(shutdown|reboot|halt|poweroff)(\s|$)'  # выключение/перезагрузка (только в позиции команды)
    'systemctl\s+(reboot|poweroff|halt|suspend)'               # systemctl выключение/перезагрузка
    'init\s+0'                                          # остановка через init
    'init\s+6'                                          # перезагрузка через init
    'mv\s+/\s'                                          # mv / ...
    'curl.*\|\s*bash'                                   # curl | bash
    'curl.*\|\s*sh'                                     # curl | sh
    'wget.*\|\s*bash'                                   # wget | bash
    'wget.*\|\s*sh'                                     # wget | sh
    'python.*-c.*import\s+os.*system'                  # python shell escape
    'iptables\s+-F'                                     # сброс firewall
    'ufw\s+disable'                                     # отключение firewall
)

for pattern in "${DANGEROUS_PATTERNS[@]}"; do
    if echo "$COMMAND" | grep -qPi "$pattern"; then
        echo "{\"decision\": \"block\", \"reason\": \"⛔ Заблокировано: опасная команда обнаружена (паттерн: $pattern)\"}"
        exit 2
    fi
done

exit 0
