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

298 lines
5.9 KiB
Markdown

# 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) :**
```powershell
-join ((48..57) + (65..90) + (97..122) | Get-Random -Count 64 | % {[char]$_})
```
**Linux/Mac :**
```bash
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 :
```env
# 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
```bash
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) ✅
```bash
curl http://localhost:8888/health
```
**Résultat attendu :**
```json
{"status":"ok","timestamp":"2025-..."}
```
---
### Test 2 : Endpoint protégé SANS token ❌
```bash
curl http://localhost:8888/info?url=https://youtube.com/watch?v=test
```
**Résultat attendu (ERREUR 401) :**
```json
{
"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é :**
```bash
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) :**
```json
{
"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 ❌
```bash
curl -H "X-API-Key: mauvais_token_123" \
"http://localhost:8888/info?url=https://youtube.com/watch?v=test"
```
**Résultat attendu (ERREUR 403) :**
```json
{
"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** :
```javascript
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) :**
```javascript
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 ?**
```bash
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 ?**
```env
# ❌ 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` :
```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`](./docs/DEPLOIEMENT_OVH.md)
---
**Bonne chance ! 🚀**