# Tests des Profils Tiers - Panel Admin

## ✅ Déploiement effectué

### Backend (OVH)
- ✅ `sast_defaults.py` → `/app/app/sast_defaults.py` 
- ✅ `config.py` → `/app/app/routers/config.py`
- ✅ `licenses.py` → `/app/app/routers/licenses.py`
- ✅ `clients.py` → `/app/app/routers/clients.py`
- ✅ Backend redémarré : `docker restart web-sentinel-admin-backend`

### Frontend (OVH)
- ✅ Compilé : `index-CAueAkvs.js` (751.82 KB)
- ✅ Déployé : `/usr/share/nginx/html/assets/index-CAueAkvs.js`
- ✅ Frontend redémarré : `docker restart web-sentinel-admin-frontend`

---

## 🧪 Tests à effectuer

### 1. Test Backend API (depuis Swagger)

**URL:** https://admin-api.web-sentinel.taaazzz-prog.fr/docs

#### Test GET /api/v1/config/tiers
```bash
# Depuis votre navigateur (DevTools Console):
fetch('https://admin-api.web-sentinel.taaazzz-prog.fr/api/v1/config/tiers', {
  headers: {
    'Authorization': 'Bearer <VOTRE_TOKEN>'
  }
})
.then(r => r.json())
.then(data => console.log(data))
```

**Résultat attendu:**
```json
{
  "FREE": {
    "label": "Free",
    "max_domains": 3,
    "max_users": 1,
    "allow_source_scan": false,
    "max_source_files": 0,
    "max_source_size_mb": 0,
    "advanced_rules": false,
    "allow_invasive_tests": false,
    "allow_html_export": false,
    "allow_multi_user": false,
    "allow_api_access": false
  },
  "STARTER": { ... },
  "PRO": { ... },
  "ENTERPRISE": { ... },
  "SYSOP": { ... }
}
```

---

### 2. Test Frontend Panel Admin

**URL:** https://admin.web-sentinel.taaazzz-prog.fr

#### A. Vérifier le nouveau panneau de configuration

1. **Se connecter** au panel admin
2. **Aller** sur l'onglet "Configuration" ou chercher "Profils Tiers"
3. **Vérifier** l'affichage du panneau avec les 5 tiers (FREE, STARTER, PRO, ENTERPRISE, SYSOP)
4. **Modifier** une valeur (ex: PRO max_domains de -1 à 20)
5. **Cliquer** sur "Sauvegarder"
6. **Actualiser** la page
7. **Vérifier** que la modification est persistée

#### B. Test création de licence avec profils

1. **Aller** sur "Licences"
2. **Cliquer** "Nouvelle licence"
3. **Sélectionner** tier "PRO"
4. **Vérifier** que les champs se pré-remplissent automatiquement:
   - `max_domains`: -1 (illimité)
   - `max_users`: 5
   - `allow_source_scan`: ✅ (coché)
   - `max_source_files`: 100
   - `max_source_size_mb`: 20
   - `allow_invasive_tests`: ✅
   - `allow_html_export`: ✅
5. **Changer** le tier vers "ENTERPRISE"
6. **Vérifier** que les valeurs se mettent à jour:
   - `max_users`: 50
   - `max_source_files`: 500
   - `max_source_size_mb`: 100
   - `advanced_rules`: ✅
7. **Créer** la licence avec un email test
8. **Vérifier** dans la liste que les limites sont correctes

#### C. Test création de client avec profils

1. **Aller** sur "Clients"
2. **Cliquer** "Nouveau client"
3. **Répéter** le même test que pour les licences
4. **Vérifier** l'application automatique des limites

---

### 3. Test Downgrade de licence

1. **Sélectionner** une licence PRO existante
2. **Modifier** le tier vers "FREE"
3. **Vérifier** que les valeurs se réinitialisent:
   - `max_domains`: 3
   - `max_users`: 1
   - `allow_source_scan`: ❌ (décoché)
   - `max_source_files`: 0
   - `max_source_size_mb`: 0
4. **Sauvegarder**
5. **Vérifier** dans la base de données:
```sql
SELECT email, tier, max_domains, max_users, allow_source_scan, max_source_files 
FROM users 
WHERE email = 'votre_test@example.com';
```

---

## ⚠️ Problèmes détectés

### 1. Erreur 405 sur /api/v1/config/tiers (OPTIONS OK, GET 405)

**Symptôme:**
```
INFO: 93.20.25.180:0 - "OPTIONS /api/v1/config/tiers HTTP/1.1" 200 OK
INFO: 93.20.25.180:0 - "GET /api/v1/config/tiers HTTP/1.1" 405 Method Not Allowed
```

**Vérifications effectuées:**
- ✅ Fichier `config.py` bien déployé (5729 bytes, 7 Nov 13:01)
- ✅ Endpoint `@router.get("/tiers")` présent dans le fichier
- ✅ Router inclus dans `main.py`: `app.include_router(config.router, prefix='/api/v1/config')`
- ✅ Endpoint visible dans OpenAPI.json

**Hypothèses:**
1. **Problème de rôle:** Le endpoint requiert `super-admin` ou `analyst`, vérifier que votre utilisateur a ce rôle
2. **Cache Nginx:** Peut-être un cache côté reverse proxy
3. **Erreur frontend:** Le hook `useTierProfiles` envoie peut-être une mauvaise requête

**Solution à tester:**

1. **Vérifier le rôle de votre utilisateur:**
```sql
SELECT email, tier, role FROM users WHERE email = 'bruno@taaazzz.be';
```

2. **Vider le cache navigateur:**
```
Ctrl+F5 sur https://admin.web-sentinel.taaazzz-prog.fr
```

3. **Test direct depuis DevTools Console:**
```javascript
// 1. Récupérer votre token depuis le panneau en haut
const token = "VOTRE_TOKEN_ICI";

// 2. Tester GET /api/v1/config/tiers
fetch('https://admin-api.web-sentinel.taaazzz-prog.fr/api/v1/config/tiers', {
  method: 'GET',
  headers: {
    'Authorization': `Bearer ${token}`,
    'Content-Type': 'application/json'
  }
})
.then(r => {
  console.log('Status:', r.status);
  return r.json();
})
.then(data => console.log('Response:', data))
.catch(err => console.error('Error:', err));
```

---

## 📊 Résumé des changements

### Backend
1. **Nouveau fichier:** `sast_defaults.py` - Référentiel central des profils tiers
2. **Nouveau endpoint:** `GET /api/v1/config/tiers` - Récupérer les profils
3. **Nouveau endpoint:** `PUT /api/v1/config/tiers` - Modifier les profils
4. **Modification:** `licenses.py` - Application automatique des limites lors de la création
5. **Modification:** `clients.py` - Application automatique des limites lors de la création

### Frontend
1. **Nouveau hook:** `useTierProfiles.ts` - Chargement/cache des profils tiers
2. **Modification:** `SettingsPanel.tsx` - Panneau d'édition des profils tiers
3. **Modification:** `LicensesTable.tsx` - Pré-remplissage automatique selon tier
4. **Modification:** `ClientsList.tsx` - Pré-remplissage automatique selon tier
5. **Nouvelle interface:** `TierProfile` dans `api.ts`

### Base de données
- ✅ Table `admin_configuration` existante utilisée pour stocker les profils personnalisés
- ✅ Clé `tier_profiles` pour la configuration

---

## 🔍 Logs utiles

### Backend logs
```bash
ssh taaazzz@web-sentinel.taaazzz-prog.fr "docker logs --tail 100 web-sentinel-admin-backend | grep -i 'tiers\|config'"
```

### Frontend logs
```javascript
// Dans DevTools Console
localStorage.getItem('tier_profiles')  // Vérifier le cache local
```

### Base de données
```sql
-- Vérifier la configuration stockée
SELECT * FROM admin_configuration WHERE key = 'tier_profiles';

-- Vérifier les limites appliquées aux licences
SELECT email, tier, max_domains, max_users, allow_source_scan, max_source_files, max_source_size_mb, advanced_rules
FROM users
ORDER BY tier, email;
```

---

## ✅ Checklist de validation

- [ ] Backend déployé et redémarré
- [ ] Frontend compilé et déployé
- [ ] GET /api/v1/config/tiers retourne les profils (200 OK)
- [ ] PUT /api/v1/config/tiers modifie les profils (200 OK)
- [ ] Panneau "Configuration des tiers" visible dans le panel admin
- [ ] Modification d'un profil est persistée
- [ ] Création de licence PRO applique automatiquement les limites
- [ ] Changement de tier (PRO → FREE) met à jour les limites
- [ ] Downgrade de licence réinitialise les valeurs SAST
- [ ] Base de données reflète les bonnes valeurs

---

## 📝 Notes

- Les profils par défaut sont définis dans `DEFAULT_TIER_PROFILES` (sast_defaults.py)
- Les modifications sont stockées dans `admin_configuration.tier_profiles`
- Les limites sont appliquées automatiquement lors de la création/modification de licences/clients
- Le hook `useTierProfiles` gère le cache et le rechargement des profils
- Les valeurs `-1` signifient "illimité"
