
# Isolamento

Rudel è un sistema overlay selezionato per richiesta. Una richiesta selezionata usa le tabelle del database della sandbox e i file del tema della sandbox, pur continuando a essere eseguita tramite l'installazione host di WordPress.

## Isolati per sandbox

### Tabelle di WordPress

Ogni sandbox riceve un prefisso di tabella generato: il prefisso host più i primi sette caratteri esadecimali dell'MD5 dell'ID della sandbox.

```text
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users
```

Rudel imposta il prefisso delle tabelle WordPress prima che WordPress termini l'avvio, così ogni query in una richiesta sandbox legge e scrive nelle copie della sandbox.

### Utenti

Le tabelle `users` e `usermeta` vengono clonate insieme al resto. Al momento della creazione, una sandbox parte con gli utenti e le password dell'host; da quel momento, gli utenti creati, modificati o eliminati nella sandbox non influiscono sull'host e le modifiche all'host non raggiungono la sandbox.

### File del tema attivo

Il tema selezionato viene copiato nella directory della sandbox:

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

Se il tema è un tema child, Rudel copia anche il tema parent, così la relazione tra i template rimane valida. Una sandbox serve sempre il tema registrato al momento della creazione; cambiare tema nella sandbox non ha effetto.

## Condivisi con l'host

- core di WordPress
- file dei plugin
- file multimediali caricati

Un plugin installato o aggiornato sull'host viene installato o aggiornato per ogni sandbox. I plugin attivi sono registrati nella tabella delle opzioni, quindi lo stato di attivazione è specifico per sandbox. I caricamenti effettuati all'interno di una sandbox finiscono nella directory dei caricamenti dell'host. In questo modo la creazione delle sandbox è rapida e si evita di sostituire `WP_CONTENT_DIR` a livello globale.

Mantenete Rudel attivo in ogni sandbox. Il blocco delle email e l'overlay del tema vengono eseguiti dal plugin; disattivarlo mentre è selezionata una sandbox rimuove anche la riga bootstrap dal `wp-config.php` condiviso, disattivando la selezione delle sandbox per l'intera installazione ([issue #13](https://github.com/inline0/rudel/issues/13)).

## Selezionare una sandbox

Le richieste HTTP selezionano una sandbox tramite:

- l'header `X-Rudel-Environment` (alias legacy `X-Rudel-Sandbox`)
- il cookie `rudel_environment` (alias legacy `rudel_sandbox`)

Rudel non imposta né cancella mai il cookie. Eliminate il cookie per tornare all'host; la voce Sandbox nella barra di amministrazione rimanda all'URL host, ma lascia il cookie al suo posto ([issue #10](https://github.com/inline0/rudel/issues/10)).

I comandi WP-CLI selezionano una sandbox tramite:

- la variabile d'ambiente `RUDEL_ENVIRONMENT`
- un `--url` il cui host inizia con l'ID della sandbox, ad esempio `--url=http://alpha-3be7.example.test`

Il selettore non è autenticato. Qualsiasi client che può raggiungere il sito e invia un ID sandbox valido accede a quella sandbox, e gli ID delle sandbox (nome più quattro caratteri esadecimali) sono facili da indovinare. Non considerate la selezione della sandbox un confine di controllo degli accessi; proteggete un host pubblico a livello di server web o di rete.

## Impostazioni predefinite delle richieste

Per una richiesta selezionata, Rudel:

- blocca le email in uscita tramite un filtro `pre_wp_mail`
- imposta `WP_TEMP_DIR` sulla directory `tmp` della sandbox
- imposta `WP_CACHE_KEY_SALT` su un valore specifico della sandbox, così le cache persistenti degli oggetti mantengono separate le chiavi della sandbox
- offre il logging `WP_DEBUG` verso `debug.log` della sandbox e chiavi e salt di autenticazione derivati dall'ID della sandbox

Il bootstrap definisce ciascuna di queste costanti solo se `wp-config.php` non l'ha già definita. Un'installazione standard di `wp-config.php` definisce `WP_DEBUG` e tutte le chiavi e i salt; in un'installazione di questo tipo, le richieste sandbox usano quindi le impostazioni di debug e le chiavi e i salt dell'host ([issue #4](https://github.com/inline0/rudel/issues/4)). Anche gli utenti vengono clonati, quindi un cookie di accesso dell'host può essere valido in una sandbox.

## Metadati di runtime

I metadati di runtime di Rudel rimangono nelle tabelle MySQL di WordPress host:

```text
wp_rudel_environments
wp_rudel_worktrees
```

Queste tabelle sono la fonte di verità di Rudel. Le directory degli ambienti contengono file e artefatti gestiti, non lo stato del registro di runtime.
