#!/bin/bash
# bloquer-commandes.sh — hook PreToolUse pour l'outil Bash de Claude Code.
#
# Claude Code envoie sur l'entrée standard un objet JSON décrivant l'appel
# d'outil ; la commande shell se trouve dans .tool_input.command.
# Code de sortie 2 = l'appel est bloqué et le message écrit sur stderr
# est transmis à Claude. Code de sortie 0 = le circuit normal des
# permissions s'applique.
#
# Prérequis : jq. Rendre le script exécutable :
#   chmod +x .claude/hooks/bloquer-commandes.sh
#
# Ce filtre est un garde-fou, pas une barrière infaillible : une commande
# peut être formulée autrement. Combinez-le avec des règles "deny" dans
# settings.json.

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

# Motifs refusés (expressions régulières étendues). Complétez la liste.
MOTIFS_INTERDITS=(
  'rm[[:space:]]+-[a-zA-Z]*r[a-zA-Z]*f'   # rm -rf, rm -fr, rm -Rf…
  'rm[[:space:]]+-[a-zA-Z]*f[a-zA-Z]*r'
  'git[[:space:]]+push.*(--force|-f([[:space:]]|$))'
  'git[[:space:]]+reset[[:space:]]+--hard'
  'git[[:space:]]+clean[[:space:]]+-[a-zA-Z]*f'
  'chmod[[:space:]]+-R[[:space:]]+777'
  'mkfs\.'
  'dd[[:space:]]+if='
  'curl[^|]*\|[[:space:]]*(ba|z)?sh'      # curl … | sh
)

for motif in "${MOTIFS_INTERDITS[@]}"; do
  if echo "$COMMANDE" | grep -Eq -- "$motif"; then
    echo "Commande bloquée par le hook de sécurité du projet (motif : $motif). Proposez une alternative non destructive ou demandez à l'utilisateur de l'exécuter lui-même." >&2
    exit 2
  fi
done

exit 0
