# Pexip External Policy Server — Guide de déploiement

## Objectif

Ce serveur de politique externe force `bypass_lock: false` sur les participant 
properties Pexip Infinity, afin que même les participants entrant un code PIN Host 
soient placés en salle d'attente lorsqu'une conférence est verrouillée.

## Architecture

```
policyserver.pexiplab.fr (OVH Cloud 100M)
│
├── .htaccess          ← Routage URL + HTTPS forcé
├── index.php          ← Serveur policy (endpoint principal)
├── config.php         ← Configuration (mode, tags, IPs, etc.)
├── admin.php          ← Interface d'administration des logs
└── logs/
    ├── .htaccess      ← Protection accès direct aux logs
    └── policy.log     ← Fichier de logs (créé automatiquement)
```

## Déploiement sur OVH Cloud 100M

### Étape 1 : Configurer le domaine

1. Connectez-vous à votre espace client OVH
2. Allez dans **Web Cloud → Hébergements → votre hébergement**
3. Onglet **Multisite** → Ajouter un domaine :
   - Domaine : `policyserver.pexiplab.fr`
   - Dossier racine : `policyserver` (ou le nom que vous voulez)
   - Cocher **SSL** (Let's Encrypt)
4. Configurez votre zone DNS pour pointer `policyserver.pexiplab.fr` vers l'IP 
   de votre hébergement OVH (enregistrement A ou CNAME)

### Étape 2 : Activer SSL / Let's Encrypt

1. Dans votre espace client OVH → **Hébergements** → Onglet **Multisite**
2. Cliquez sur les **...** à côté de `policyserver.pexiplab.fr`
3. Sélectionnez **Modifier** → Cochez **SSL** → Validez
4. Puis dans l'onglet **Informations générales** → Section **Certificat SSL** :
   - Cliquez sur **Commander un certificat SSL** (Let's Encrypt gratuit)
   - Ou **Regénérer le certificat SSL** si déjà existant
5. Attendez quelques minutes que le certificat se propage

### Étape 3 : Uploader les fichiers

1. Connectez-vous en **FTP** à votre hébergement :
   - Hôte : `ftp.cluster0XX.hosting.ovh.net` (voir espace client)
   - Login : votre identifiant FTP OVH
   - Port : 21 (ou SFTP port 22)
2. Naviguez vers le dossier racine défini à l'étape 1 (ex: `/policyserver/`)
3. Uploadez **tous les fichiers** du dossier `www/` :
   - `.htaccess`
   - `index.php`
   - `config.php`
   - `admin.php`
   - `logs/.htaccess`

### Étape 4 : Configurer le policy server

1. Éditez `config.php` selon vos besoins :
   - **`mode`** : `'all'` pour appliquer à toutes les VMRs, 
     `'tag'` pour cibler par service_tag, `'vmr_list'` pour cibler par nom
   - **`admin_key`** : **CHANGEZ ABSOLUMENT** cette valeur par une clé secrète
   - **`ip_restriction_enabled`** : passez à `true` en production et ajoutez 
     les IPs de vos Conferencing Nodes

### Étape 5 : Vérifier le fonctionnement

1. Accédez à `https://policyserver.pexiplab.fr/` 
   → Vous devez voir un JSON avec `"status": "ok"`

2. Testez l'endpoint participant properties :
   ```
   https://policyserver.pexiplab.fr/policy/v1/participant/properties?preauthenticated_role=chair&bypass_lock=True
   ```
   → Vous devez voir `"bypass_lock": false` dans la réponse

3. Accédez à l'admin :
   ```
   https://policyserver.pexiplab.fr/admin.php?key=VOTRE_CLE_SECRETE
   ```
   → Vous verrez les logs de vos tests

## Configuration côté Pexip Infinity

### Étape 6 : Configurer le Policy Profile

1. Connectez-vous à l'interface admin Pexip Infinity
2. **Call control → Policy profiles**
3. Créez un nouveau profil ou éditez un existant
4. Section **External policy server** :
   - **URL** : `https://policyserver.pexiplab.fr`
   - Credentials : laisser vide (pas d'authentification HTTP)
5. Cochez **Participant properties** dans les types de données externes
6. **Sauvegardez**

### Étape 7 : Assigner aux Locations

1. **Platform → Locations**
2. Pour chaque Location concernée, sélectionnez le Policy Profile créé
3. Sauvegardez

### Étape 8 : (Optionnel) Taguer les VMRs

Si vous utilisez le mode `'tag'` :
1. **Services → Virtual Meeting Rooms**
2. Pour chaque VMR où vous voulez le strict-lock :
   - Ouvrez la VMR → champ **Service tag** → entrez `strict-lock`
   - Sauvegardez

## Test du scénario complet

1. **Host A** rejoint la VMR → entre normalement
2. **Host A** verrouille la conférence (icône cadenas ou *7)
3. **Host B** appelle la VMR et entre le code PIN Host
4. **Résultat attendu** : Host B est placé en salle d'attente ("Waiting for Host")
5. **Host A** voit la notification et peut admettre Host B via le bouton "Admit"

## Dépannage

### Le policy server ne répond pas
- Vérifiez que le DNS de `policyserver.pexiplab.fr` pointe bien vers OVH
- Vérifiez que le certificat SSL est actif
- Testez l'URL dans un navigateur

### Le bypass_lock n'est pas honoré par Pexip
- Vérifiez les logs admin : les requêtes de Pexip arrivent-elles ?
- Vérifiez que le Policy Profile est bien assigné à la bonne Location
- Vérifiez que "Participant properties" est bien coché pour l'external policy
- Vérifiez que le Conferencing Node peut joindre le serveur (pas de firewall)

### Les logs ne s'écrivent pas
- Vérifiez les permissions du dossier `logs/` (755 ou 750)
- Vérifiez que PHP a le droit d'écriture dans ce dossier

## Sécurisation en production

1. **Changez la clé admin** dans `config.php`
2. **Activez la restriction IP** et ajoutez les IPs de vos Conferencing Nodes
3. **Désactivez le logging** une fois que tout fonctionne (ou réduisez `max_log_lines`)
4. Vérifiez que le dossier `logs/` n'est pas accessible publiquement
