
# Isolering

Rudel är ett överlagringssystem som väljs per förfrågan. En vald förfrågan använder sandlådans databastabeller och temafiler medan den fortfarande körs genom värdens WordPress-installation.

## Isolerat per sandlåda

### WordPress-tabeller

Varje sandlåda får ett genererat tabellprefix: värdens prefix plus de första sju hextecknen i MD5 för sandlådans ID.

```text
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users
```

Rudel byter WordPresss tabellprefix innan WordPress har startat klart, så varje fråga under en sandlådeförfrågan läser och skriver sandlådans kopior.

### Användare

Tabellerna `users` och `usermeta` klonas tillsammans med resten. En sandlåda börjar med värdens användare och lösenord vid skapandet; därefter påverkar användare som skapas, ändras eller tas bort i sandlådan inte värden, och ändringar på värden når inte sandlådan.

### Aktiva temafiler

Det valda temat kopieras till sandlådans katalog:

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

Om temat är ett barntema kopierar Rudel även det överordnade temat så att mallrelationen förblir giltig. En sandlåda visar alltid temat som registrerades vid skapandet; temabyten i sandlådan har ingen effekt.

## Delat med värden

- WordPress-kärna
- pluginfiler
- uppladdade mediefiler

Ett plugin som installeras eller uppdateras på värden installeras eller uppdateras för varje sandlåda. Vilka pluginer som är aktiva lagras i alternativtabellen, så aktiveringsstatusen är separat per sandlåda. Uppladdningar som görs i en sandlåda hamnar i värdens uppladdningskatalog. Det gör att sandlådor skapas snabbt och att man slipper ersätta `WP_CONTENT_DIR` globalt.

Håll Rudel aktivt i varje sandlåda. Dess blockering av e-post och temalager körs från pluginet, och om det inaktiveras medan en sandlåda är vald tas även bootstrap-raden bort från den delade `wp-config.php`, vilket stänger av sandlådevalet för hela installationen ([ärende #13](https://github.com/inline0/rudel/issues/13)).

## Välja en sandlåda

HTTP-förfrågningar väljer en sandlåda via:

- rubriken `X-Rudel-Environment` (äldre alias `X-Rudel-Sandbox`)
- cookien `rudel_environment` (äldre alias `rudel_sandbox`)

Rudel anger eller rensar aldrig cookien. Ta bort den för att återgå till värden; objektet Sandlåda i adminfältet länkar till värdens URL men låter cookien vara kvar ([ärende #10](https://github.com/inline0/rudel/issues/10)).

WP-CLI-kommandon väljer en sandlåda via:

- miljövariabeln `RUDEL_ENVIRONMENT`
- en `--url` vars värdnamn börjar med sandlådans ID, till exempel `--url=http://alpha-3be7.example.test`

Väljaren saknar autentisering. Alla klienter som kan nå webbplatsen och skickar ett giltigt sandlåde-ID får åtkomst till den sandlådan, och sandlåde-ID:n (namn plus fyra hextecken) är lätta att gissa. Behandla inte sandlådeval som en åtkomstkontroll; skydda en offentlig värd på webbserver- eller nätverksnivå.

## Standardvärden för förfrågningar

För en vald förfrågan Rudel:

- blockerar utgående e-post genom ett `pre_wp_mail`-filter
- anger `WP_TEMP_DIR` till sandlådans katalog `tmp`
- anger `WP_CACHE_KEY_SALT` till ett sandlådespecifikt värde så att beständiga objektcacher håller isär sandlådenycklar
- erbjuder `WP_DEBUG`-loggning till sandlådans `debug.log` samt autentiseringsnycklar och salter som härletts från sandlåde-ID:t

Bootstrapen definierar var och en av dessa konstanter endast om `wp-config.php` inte redan har definierat den. En standardinstallation av `wp-config.php` definierar `WP_DEBUG` samt alla nycklar och salter, så på en sådan installation använder sandlådeförfrågningar värdens felsökningsinställning och värdens nycklar och salter ([ärende #4](https://github.com/inline0/rudel/issues/4)). Eftersom användarna också klonas kan en inloggningscookie från värden vara giltig i en sandlåda.

## Metadata vid körning

Rudel-metadata vid körning lagras i värdens WordPress-tabeller MySQL:

```text
wp_rudel_environments
wp_rudel_worktrees
```

Dessa tabeller är Rudels enda sanningskälla. Miljökataloger innehåller hanterade filer och artefakter, inte registertillstånd vid körning.
