
# Isolation

Rudel est un système de superposition sélectionné par requête. Une requête sélectionnée utilise les tables de base de données et les fichiers de thème du bac à sable, tout en s’exécutant dans l’installation WordPress de l’hôte.

## Isolé dans chaque bac à sable

### Tables WordPress

Chaque bac à sable reçoit un préfixe de table généré : le préfixe de l’hôte suivi des sept premiers caractères hexadécimaux du MD5 de l’ID du bac à sable.

```text
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users
```

Rudel modifie le préfixe de table WordPress avant la fin du démarrage de WordPress, afin que chaque requête d’une requête de bac à sable lise et écrive dans les copies du bac à sable.

### Utilisateurs

Les tables `users` et `usermeta` sont clonées avec les autres. À sa création, un bac à sable contient les utilisateurs et mots de passe de l’hôte ; ensuite, les utilisateurs créés, modifiés ou supprimés dans le bac à sable n’affectent pas l’hôte, et les modifications de l’hôte ne sont pas répercutées dans le bac à sable.

### Fichiers du thème actif

Le thème sélectionné est copié dans le répertoire du bac à sable :

```text
wp-content/rudel-environments/{environment_id}/themes/{theme_slug}
```

Si le thème est un thème enfant, Rudel copie également le thème parent afin de préserver la relation entre les modèles. Un bac à sable sert toujours le thème enregistré à sa création ; changer de thème dans le bac à sable n’a aucun effet.

## Partagé avec l’hôte

- le cœur WordPress
- les fichiers des extensions
- les fichiers médias téléversés

Une extension installée ou mise à jour sur l’hôte l’est pour chaque bac à sable. Les extensions actives sont enregistrées dans la table des options ; leur état d’activation est donc propre à chaque bac à sable. Les fichiers téléversés depuis un bac à sable sont placés dans le répertoire des téléversements de l’hôte. Cela accélère la création des bacs à sable et évite de remplacer `WP_CONTENT_DIR` globalement.

Laissez Rudel activé dans chaque bac à sable. Le blocage des e-mails et la superposition du thème s’exécutent depuis l’extension ; la désactiver alors qu’un bac à sable est sélectionné supprime également la ligne d’initialisation du fichier `wp-config.php` partagé, ce qui désactive la sélection des bacs à sable pour toute l’installation ([problème n° 13](https://github.com/inline0/rudel/issues/13)).

## Sélectionner un bac à sable

Les requêtes HTTP sélectionnent un bac à sable au moyen de :

- l’en-tête `X-Rudel-Environment` (ancien alias `X-Rudel-Sandbox`)
- le cookie `rudel_environment` (ancien alias `rudel_sandbox`)

Rudel ne définit ni n’efface jamais le cookie. Supprimez-le pour revenir à l’hôte ; l’élément Bac à sable de la barre d’administration renvoie vers l’URL hôte, mais conserve le cookie ([problème n° 10](https://github.com/inline0/rudel/issues/10)).

Les commandes WP-CLI sélectionnent un bac à sable au moyen de :

- la variable d’environnement `RUDEL_ENVIRONMENT`
- une `--url` dont l’hôte commence par l’ID du bac à sable, par exemple `--url=http://alpha-3be7.example.test`

Le sélecteur n’est pas authentifié. Tout client pouvant accéder au site et envoyer un ID de bac à sable valide obtient ce bac à sable, et les ID (nom suivi de quatre caractères hexadécimaux) sont faciles à deviner. Ne considérez pas la sélection d’un bac à sable comme une limite de contrôle d’accès ; protégez un hôte public au niveau du serveur web ou du réseau.

## Valeurs par défaut des requêtes

Pour une requête sélectionnée, Rudel :

- bloque les e-mails sortants au moyen d’un filtre `pre_wp_mail`
- définit `WP_TEMP_DIR` sur le répertoire `tmp` du bac à sable
- définit `WP_CACHE_KEY_SALT` sur une valeur propre au bac à sable afin que les caches d’objets persistants séparent les clés du bac à sable
- propose la journalisation `WP_DEBUG` dans le bac à sable `debug.log`, ainsi que des clés et sels d’authentification dérivés de son ID

L’initialisation définit chacune de ces constantes uniquement si `wp-config.php` ne l’a pas déjà définie. Une installation `wp-config.php` standard définit `WP_DEBUG` ainsi que toutes les clés et tous les sels ; sur une telle installation, les requêtes de bac à sable utilisent donc le réglage de débogage de l’hôte et ses clés et sels ([problème n° 4](https://github.com/inline0/rudel/issues/4)). Les utilisateurs étant également clonés, un cookie de connexion de l’hôte peut être valide dans un bac à sable.

## Métadonnées d’exécution

Les métadonnées d’exécution de Rudel restent dans les tables MySQL WordPress de l’hôte :

```text
wp_rudel_environments
wp_rudel_worktrees
```

Ces tables sont la source de vérité de Rudel. Les répertoires d’environnement contiennent des fichiers et des artefacts gérés, et non l’état du registre d’exécution.
