videotomp3transcriptor/TEST_LOCAL.md
StillHammer c0cfc4c28e Add API security with token authentication and localStorage management
- Add API token authentication middleware (X-API-Key header)
- Add CORS configuration with ALLOWED_ORIGINS
- Add security HTTP headers (X-Frame-Options, CSP, etc.)
- Add web interface for API token configuration with localStorage
- Add toggle visibility for token input
- Add connection status indicator
- Add auto-save token functionality
- Update API documentation with authentication examples
- Add deployment guides (OVH specific and general)
- Add local testing guide

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 12:01:19 +08:00

5.9 KiB

Test Local du Système de Sécurité

Ce guide te permet de tester la sécurité de l'API localement avant de déployer sur le serveur.

Étape 1 : Générer un token de test

Windows (PowerShell) :

-join ((48..57) + (65..90) + (97..122) | Get-Random -Count 64 | % {[char]$_})

Linux/Mac :

openssl rand -hex 32

Copie le token généré. Exemple : a1b2c3d4e5f6...


Étape 2 : Configurer le .env

Édite ton fichier .env et ajoute (ou modifie) ces lignes :

# Token API (colle ton token généré)
API_TOKEN=ton_token_genere_ici

# CORS en développement (tout autoriser)
ALLOWED_ORIGINS=*

# Port
PORT=8888

# Ta clé OpenAI (tu l'as déjà normalement)
OPENAI_API_KEY=sk-...

Étape 3 : Démarrer le serveur

npm run server

Résultat attendu :

Server running on http://localhost:8888

Endpoints:
  GET  /health           - Health check
  GET  /info?url=        - Get video/playlist info
  POST /download         - Download as MP3
  ...

Étape 4 : Tester l'authentification

Test 1 : Endpoint public (sans token)

curl http://localhost:8888/health

Résultat attendu :

{"status":"ok","timestamp":"2025-..."}

Test 2 : Endpoint protégé SANS token

curl http://localhost:8888/info?url=https://youtube.com/watch?v=test

Résultat attendu (ERREUR 401) :

{
  "error": "Unauthorized",
  "message": "API key required. Provide X-API-Key header or Authorization: Bearer <token>"
}

Si tu vois cette erreur, c'est PARFAIT ! Ça veut dire que la sécurité fonctionne.


Test 3 : Endpoint protégé AVEC token

Remplace ton_token_ici par le token que tu as généré :

curl -H "X-API-Key: ton_token_ici" \
  "http://localhost:8888/info?url=https://youtube.com/watch?v=dQw4w9WgXcQ"

Résultat attendu (informations sur la vidéo) :

{
  "success": true,
  "title": "Rick Astley - Never Gonna Give You Up",
  "type": "video",
  "duration": 212,
  ...
}

Si tu vois les infos de la vidéo, parfait !


Test 4 : Avec un MAUVAIS token

curl -H "X-API-Key: mauvais_token_123" \
  "http://localhost:8888/info?url=https://youtube.com/watch?v=test"

Résultat attendu (ERREUR 403) :

{
  "error": "Forbidden",
  "message": "Invalid API key"
}

Si tu vois cette erreur, c'est bon !


Étape 5 : Tester l'interface web

1. Ouvre ton navigateur

Va sur : http://localhost:8888


2. Configure le token

  1. Clique sur le panneau "🔐 API Configuration"
  2. Colle ton token dans le champ "API Token"
  3. Clique sur "Save & Test"

Résultat attendu :

  • Le statut passe en vert : "Connected ✓"
  • Notification verte : "✓ API token saved successfully!"
  • Le panneau se referme automatiquement

![Configuration réussie]


3. Teste un téléchargement

  1. Va dans l'onglet "Download"
  2. Entre cette URL de test : https://www.youtube.com/watch?v=dQw4w9WgXcQ
  3. Clique sur "Download MP3"

Résultat attendu :

  • La barre de progression apparaît
  • Le téléchargement démarre
  • Un fichier MP3 est créé dans ./output/

4. Teste sans token (localStorage)

  1. Ouvre la console du navigateur (F12)
  2. Efface le localStorage :
    localStorage.clear()
    
  3. Rafraîchis la page (F5)
  4. Essaie de télécharger à nouveau la même vidéo

Résultat attendu :

  • Une erreur apparaît : "⚠️ Authentication Error"
  • Message : "API token required"

C'est parfait ! Sans token dans localStorage, l'API refuse la requête.


5. Re-configure le token

  1. Rouvre le panneau de configuration
  2. Entre ton token à nouveau
  3. Clique "Save & Test"
  4. Le téléchargement devrait maintenant fonctionner

Étape 6 : Vérifier le localStorage

Dans la console du navigateur (F12) :

localStorage.getItem('video_transcriptor_api_token')

Résultat attendu :

"ton_token_genere_ici"

Le token est bien sauvegardé !


Récapitulatif des Tests

Test Attendu Statut
/health sans token 200 OK
/info sans token 401 Unauthorized
/info avec bon token 200 OK + données
/info avec mauvais token 403 Forbidden
Interface web - config token "Connected ✓"
Interface web - download avec token Fonctionne
Interface web - download sans token Erreur auth
localStorage sauvegarde token Token présent

Dépannage

Le serveur ne démarre pas

Erreur possible : API_TOKEN not configured in .env

Solution : Vérifie que .env contient bien API_TOKEN=...


"Authentication Error" même avec token

Vérifications :

  1. Le token dans .env est identique à celui dans l'interface ?

    cat .env | grep API_TOKEN
    
  2. Le serveur a bien redémarré après modification de .env ?

    • Arrête le serveur (Ctrl+C)
    • Relance : npm run server
  3. Le token ne contient pas d'espaces ?

    # ❌ MAUVAIS
    API_TOKEN= mon_token
    
    # ✅ BON
    API_TOKEN=mon_token
    

"CORS error" dans la console

Problème : La requête est bloquée par CORS

Solution : Vérifie dans .env :

ALLOWED_ORIGINS=*

Redémarre le serveur.


Le localStorage ne sauvegarde pas

Problème : Le navigateur bloque le localStorage

Solutions :

  1. Désactive les extensions qui bloquent (uBlock, Privacy Badger)
  2. Vérifie que tu n'es pas en mode navigation privée
  3. Autorise le stockage local pour localhost

Prochaine Étape

Si tous les tests sont OK, tu peux déployer sur le serveur OVH !

📄 Suis le guide : docs/DEPLOIEMENT_OVH.md


Bonne chance ! 🚀