- Ajout support custom API keys (Anthropic/OpenAI) dans localStorage - Backend utilise custom keys si fournis (pas de déduction rate limit) - Tentative fix rate limiter pour /api/llm/limit (skip globalLimiter) - Fix undefined/undefined dans compteur requêtes - Ajout error loop prevention (stop après 5 erreurs) - Reset quotidien à minuit pour compteur LLM Note: Problème 429 persiste, à débugger à la maison 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
130 lines
3.9 KiB
Bash
130 lines
3.9 KiB
Bash
#!/bin/bash
|
|
|
|
# Test de sécurité - Full Lockdown
|
|
# Ce script teste tous les endpoints pour vérifier qu'ils sont protégés
|
|
|
|
echo "🔒 Test de sécurité - ConfluentTranslator"
|
|
echo "========================================"
|
|
echo ""
|
|
|
|
BASE_URL="http://localhost:3000"
|
|
TOKEN=""
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Test counter
|
|
TOTAL=0
|
|
PASSED=0
|
|
FAILED=0
|
|
|
|
test_endpoint() {
|
|
local method=$1
|
|
local endpoint=$2
|
|
local expected_status=$3
|
|
local description=$4
|
|
local auth=$5
|
|
|
|
TOTAL=$((TOTAL + 1))
|
|
|
|
if [ "$method" = "GET" ]; then
|
|
if [ "$auth" = "true" ]; then
|
|
response=$(curl -s -w "\n%{http_code}" -H "x-api-key: $TOKEN" "$BASE_URL$endpoint")
|
|
else
|
|
response=$(curl -s -w "\n%{http_code}" "$BASE_URL$endpoint")
|
|
fi
|
|
else
|
|
if [ "$auth" = "true" ]; then
|
|
response=$(curl -s -w "\n%{http_code}" -X POST -H "Content-Type: application/json" -H "x-api-key: $TOKEN" -d '{"text":"test"}' "$BASE_URL$endpoint")
|
|
else
|
|
response=$(curl -s -w "\n%{http_code}" -X POST -H "Content-Type: application/json" -d '{"text":"test"}' "$BASE_URL$endpoint")
|
|
fi
|
|
fi
|
|
|
|
status=$(echo "$response" | tail -n1)
|
|
|
|
if [ "$status" = "$expected_status" ]; then
|
|
echo -e "${GREEN}✓${NC} $description"
|
|
echo -e " ${method} ${endpoint} → ${status}"
|
|
PASSED=$((PASSED + 1))
|
|
else
|
|
echo -e "${RED}✗${NC} $description"
|
|
echo -e " ${method} ${endpoint} → ${status} (attendu: ${expected_status})"
|
|
FAILED=$((FAILED + 1))
|
|
fi
|
|
echo ""
|
|
}
|
|
|
|
echo "📋 Phase 1: Endpoints PUBLICS (sans auth)"
|
|
echo "==========================================="
|
|
echo ""
|
|
|
|
test_endpoint "GET" "/api/health" "200" "Health check public" "false"
|
|
|
|
echo ""
|
|
echo "🔒 Phase 2: Endpoints PROTÉGÉS (sans auth → 401)"
|
|
echo "=================================================="
|
|
echo ""
|
|
|
|
test_endpoint "GET" "/api/stats" "401" "Stats sans auth" "false"
|
|
test_endpoint "GET" "/api/lexique/ancien" "401" "Lexique sans auth" "false"
|
|
test_endpoint "GET" "/api/search?q=test" "401" "Search sans auth" "false"
|
|
test_endpoint "POST" "/translate" "401" "Traduction FR→CF sans auth" "false"
|
|
test_endpoint "POST" "/api/translate/conf2fr" "401" "Traduction CF→FR sans auth" "false"
|
|
test_endpoint "POST" "/api/reload" "401" "Reload sans auth" "false"
|
|
|
|
echo ""
|
|
echo "🔑 Phase 3: Récupération du token admin"
|
|
echo "========================================"
|
|
echo ""
|
|
|
|
# Vérifier si le fichier tokens.json existe
|
|
if [ ! -f "data/tokens.json" ]; then
|
|
echo -e "${YELLOW}⚠${NC} Fichier data/tokens.json introuvable"
|
|
echo " Veuillez démarrer le serveur une fois pour créer le token admin"
|
|
exit 1
|
|
fi
|
|
|
|
# Extraire le premier token
|
|
TOKEN=$(jq -r 'keys[0]' data/tokens.json 2>/dev/null)
|
|
|
|
if [ -z "$TOKEN" ] || [ "$TOKEN" = "null" ]; then
|
|
echo -e "${YELLOW}⚠${NC} Aucun token trouvé dans data/tokens.json"
|
|
echo " Veuillez démarrer le serveur une fois pour créer le token admin"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${GREEN}✓${NC} Token admin trouvé: ${TOKEN:0:20}..."
|
|
echo ""
|
|
|
|
echo "🔓 Phase 4: Endpoints PROTÉGÉS (avec auth → 200)"
|
|
echo "================================================="
|
|
echo ""
|
|
|
|
test_endpoint "GET" "/api/stats" "200" "Stats avec auth" "true"
|
|
test_endpoint "GET" "/api/lexique/ancien" "200" "Lexique avec auth" "true"
|
|
test_endpoint "GET" "/api/validate" "200" "Validation avec auth" "true"
|
|
test_endpoint "GET" "/api/search?q=test&variant=ancien" "200" "Search avec auth" "true"
|
|
|
|
echo ""
|
|
echo "📊 RÉSULTATS"
|
|
echo "============"
|
|
echo ""
|
|
echo -e "Total: ${TOTAL} tests"
|
|
echo -e "${GREEN}Réussis: ${PASSED}${NC}"
|
|
echo -e "${RED}Échoués: ${FAILED}${NC}"
|
|
echo ""
|
|
|
|
if [ $FAILED -eq 0 ]; then
|
|
echo -e "${GREEN}✓ TOUS LES TESTS SONT PASSÉS${NC}"
|
|
echo -e "${GREEN}🔒 Le système est correctement sécurisé${NC}"
|
|
exit 0
|
|
else
|
|
echo -e "${RED}✗ CERTAINS TESTS ONT ÉCHOUÉ${NC}"
|
|
echo -e "${RED}⚠ Vérifiez la configuration de sécurité${NC}"
|
|
exit 1
|
|
fi
|