# Guide de Configuration OAuth Discord

Ce guide t'explique comment configurer l'authentification Discord OAuth2 pour le serveur de transcripts.

## Étape 1 : Créer une Application Discord

1. Va sur le [Discord Developer Portal](https://discord.com/developers/applications)
2. Clique sur **"New Application"** (Nouvelle Application)
3. Donne un nom à ton application (ex: "Femboy Croissant Transcripts")
4. Clique sur **"Create"** (Créer)

## Étape 2 : Récupérer le Client ID

1. Dans le menu de gauche, clique sur **"OAuth2"**
2. Tu verras ton **Client ID** dans la section "Client Information"
3. **Copie ce Client ID** (tu en auras besoin plus tard)

## Étape 3 : Créer un Client Secret

1. Toujours dans **"OAuth2"**, scroll jusqu'à la section "Client Secret"
2. Clique sur **"Reset Secret"** (Réinitialiser le Secret)
3. **⚠️ ATTENTION :** Copie immédiatement le Client Secret qui s'affiche, car il ne sera plus visible après !
4. Si tu l'as perdu, tu devras le régénérer

## Étape 4 : Configurer les Redirects

1. Toujours dans **"OAuth2"**, scroll jusqu'à la section **"Redirects"**
2. Clique sur **"Add Redirect"** (Ajouter une redirection)
3. **Tu peux ajouter PLUSIEURS URLs !** Ajoute-les une par une :

   **Pour le développement local :**
   ```
   http://localhost:3000/auth/discord/callback
   ```

   **Pour la production (si tu as un domaine) :**
   ```
   https://transcripts.syxpi.fr/auth/discord/callback
   ```
   
   **💡 Astuce :** Tu peux ajouter les deux URLs pour pouvoir tester en local ET utiliser en production. Discord accepte plusieurs redirect URLs !

4. Après avoir ajouté chaque URL, clique sur **"Save Changes"** (Enregistrer les modifications)

## Étape 5 : Configurer les Scopes

1. Dans la section **"Scopes"** (juste au-dessus de Redirects)
2. Coche ces cases :
   - ✅ `identify` - Pour récupérer les infos de base de l'utilisateur
   - ✅ `guilds` - Pour vérifier les rôles de l'utilisateur (optionnel, pour plus tard)

## Étape 6 : Ajouter les variables dans .env

Ouvre ton fichier `.env` à la racine du projet et ajoute ces lignes :

```env
# Discord OAuth
# Tu peux utiliser CLIENT_ID et CLIENT_SECRET (déjà utilisés par le bot)
# OU DISCORD_CLIENT_ID et DISCORD_CLIENT_SECRET (dédiés à l'OAuth)
CLIENT_ID=ton_client_id_ici
CLIENT_SECRET=ton_client_secret_ici

# Pour le développement local :
DISCORD_CALLBACK_URL=http://localhost:3000/auth/discord/callback

# Pour la production (décommente quand tu déploies en prod) :
# DISCORD_CALLBACK_URL=https://transcripts.syxpi.fr/auth/discord/callback
```

**Exemple :**
```env
CLIENT_ID=123456789012345678
CLIENT_SECRET=abcdefghijklmnopqrstuvwxyz123456789
DISCORD_CALLBACK_URL=http://localhost:3000/auth/discord/callback
```

**💡 Important :**
- Le serveur accepte **`CLIENT_ID` et `CLIENT_SECRET`** (même variables que le bot)
- Ou **`DISCORD_CLIENT_ID` et `DISCORD_CLIENT_SECRET`** (variables dédiées)
- Dans le Discord Developer Portal, tu peux ajouter **les deux URLs** dans les Redirects
- Dans ton `.env`, tu mets **seulement l'URL que tu utilises actuellement**
- Pour tester en local : utilise `http://localhost:3000/auth/discord/callback`
- Pour la production : change le `.env` pour utiliser `https://transcripts.syxpi.fr/auth/discord/callback`

## Étape 7 : Configurer les Modérateurs (Optionnel)

Si tu veux que certains utilisateurs aient accès à tous les transcripts (pas seulement les leurs), ajoute leurs IDs Discord dans `.env` :

```env
MODERATOR_IDS=361526553940721684,autre_id_ici,encore_un_autre_id
```

**Comment trouver ton ID Discord ?**
1. Active le mode développeur dans Discord : Paramètres → Avancé → Mode développeur
2. Clic droit sur ton nom/avatar → "Copier l'ID"

## Étape 8 : Tester

1. Redémarre le serveur : `npm run server`
2. Va sur `http://localhost:3000`
3. Tu devrais être redirigé vers la page de login Discord
4. Clique sur "Se connecter avec Discord"
5. Autorise l'application
6. Tu devrais être redirigé vers le dashboard !

## Dépannage

### Erreur : "Invalid redirect_uri"
- Vérifie que l'URL dans `DISCORD_CALLBACK_URL` correspond exactement à une des URLs dans les Redirects du Discord Developer Portal
- Les URLs doivent correspondre caractère par caractère (y compris `http://` vs `https://`)
- **Tu peux ajouter plusieurs URLs dans les Redirects**, mais dans `.env` tu mets seulement celle que tu utilises actuellement
- Vérifie qu'il n'y a pas d'espace ou de caractère invisible dans l'URL

### Erreur : "Unknown authentication strategy"
- Vérifie que `passport-discord` est installé : `npm install passport-discord`
- Vérifie que les variables `DISCORD_CLIENT_ID` et `DISCORD_CLIENT_SECRET` sont bien dans `.env`
- Redémarre le serveur après avoir modifié `.env`

### Erreur : "Missing Access"
- Vérifie que tu as coché les bons scopes dans le Discord Developer Portal
- Vérifie que l'URL de callback est bien configurée

### Le serveur démarre mais l'OAuth ne fonctionne pas
- Vérifie les logs du serveur : tu devrais voir "✅ Stratégie Discord OAuth configurée avec succès"
- Si tu vois un avertissement, vérifie tes variables d'environnement

## Production

Pour déployer en production :

1. **Configure un domaine** (ex: `transcript.syxpi.fr`)
2. **Configure HTTPS** (Let's Encrypt avec Certbot)
3. **Configure un reverse proxy** (Nginx/Apache) pointant vers le port 3000
4. **Mets à jour les Redirects** dans le Discord Developer Portal avec l'URL de production
5. **Mets à jour `DISCORD_CALLBACK_URL`** dans `.env` avec l'URL de production
6. **Change `SESSION_SECRET`** pour une valeur aléatoire sécurisée
7. **Configure `NODE_ENV=production`** dans `.env`

## Sécurité

- ⚠️ **NE PARTAGE JAMAIS** ton Client Secret
- ⚠️ **NE COMMIT JAMAIS** ton fichier `.env` dans Git
- ⚠️ Utilise des secrets forts pour `SESSION_SECRET` en production
- ⚠️ Active HTTPS en production (obligatoire pour les cookies sécurisés)

## Ressources

- [Discord Developer Portal](https://discord.com/developers/applications)
- [Documentation OAuth2 Discord](https://discord.com/developers/docs/topics/oauth2)
- [Documentation passport-discord](https://github.com/nicholastay/passport-discord)

