#!/bin/bash
# PreToolUse hook - blokuje zapis sekretów do plików
# Exit code 2 = blokuj operację, exit 0 = przepuść
# Rejestracja w settings.json:
#   "hooks": { "PreToolUse": [{ "matcher": "Write|Edit", "hooks": [{ "type": "command", "command": ".claude/hooks/detect-secrets.sh" }] }] }

TOOL_NAME="$1"
TOOL_INPUT="$2"

# Tylko sprawdzaj operacje zapisu
if [[ "$TOOL_NAME" != "Write" && "$TOOL_NAME" != "Edit" ]]; then
  exit 0
fi

# Wzorce sekretów do wykrycia
PATTERNS=(
  'AKIA[0-9A-Z]{16}'                          # AWS Access Key
  'aws_secret_access_key\s*=\s*[^\s]+'        # AWS Secret
  'ghp_[a-zA-Z0-9]{36}'                       # GitHub Personal Token
  'ghs_[a-zA-Z0-9]{36}'                       # GitHub App Token
  'sk_live_[a-zA-Z0-9]+'                      # Stripe Live Key
  'sk_test_[a-zA-Z0-9]+'                      # Stripe Test Key
  'password\s*=\s*["\x27][^\s"]{8,}'          # Generic password=
  'passwd\s*=\s*["\x27][^\s"]{8,}'            # Generic passwd=
  'api_key\s*=\s*["\x27][^\s"]{8,}'           # Generic api_key=
  'secret\s*=\s*["\x27][^\s"]{8,}'            # Generic secret=
  'postgresql://[^:]+:[^@]+@'                  # PostgreSQL connection string
  'mysql://[^:]+:[^@]+@'                       # MySQL connection string
  'mongodb\+srv://[^:]+:[^@]+@'               # MongoDB Atlas connection string
)

for pattern in "${PATTERNS[@]}"; do
  if echo "$TOOL_INPUT" | grep -qE "$pattern"; then
    echo "SECURITY BLOCK: Wykryto potencjalny sekret pasujący do wzorca: $pattern" >&2
    echo "Operacja zablokowana. Użyj zmiennych środowiskowych zamiast hardkodowania sekretów." >&2
    exit 2
  fi
done

exit 0
