- 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>
298 lines
5.9 KiB
Markdown
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 ! 🚀**
|