# Impostazioni, servizi e tabelle del database di OpenPlatform

> Le chiavi di configurazione che OpenPlatform legge, cosa fanno i suoi servizi in background e a cosa serve ogni tabella dello schema op.

Framework: openplatform
Product: OpenPlatform (openplatform@5)
Language: it
Content-SHA256: 5a74468093420aff75346a972e1f23c0bc8f93beae1ee22af58cf95228b94a8f
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

## Le impostazioni

OpenPlatform conserva la sua configurazione nella tabella `cl_config` e la carica nel `CONF` di Total.js all’avvio e ogni otto ore (`definitions/init.js`). La schermata di configurazione legge e salva queste chiavi (`plugins/setup/schemas/settings.js`):

| Chiave | Significato |
|---|---|
| `name`, `icon`, `color` | il nome, il logo e il colore della piattaforma |
| `url` | l’indirizzo pubblico della piattaforma (senza la `/` finale). Cambiarlo svuota i link delle notifiche e le sessioni di applicazione aperte |
| `language` | la lingua predefinita |
| `mail_smtp`, `mail_smtp_options`, `mail_from` | il server SMTP, le sue opzioni (JSON) e il mittente; la schermata di configurazione può testarli |
| `$tms`, `secret_tms` | pubblicare gli eventi tramite TMS, e il segreto di quella connessione |
| `allow_token`, `token` | abilitare l’API pubblica `GET /users/` e il suo token |
| `newtab` | aprire ogni applicazione in una nuova scheda |
| `sync`, `sync_token` | accettare il socket `/sync/` di altre istanze, con il suo token |

Il primo avvio (`database.sql`) genera anche, dentro `cl_config`, valori che la schermata di configurazione non modifica: l’`id` dell’installazione, il `secret` di autenticazione, il nome del `cookie`, il `salt` delle password, il `saltchecksum` dei checksum e il segreto della connessione TMS. Crea le chiavi con questi valori predefiniti:

| Chiave | Predefinito | Significato |
|---|---|---|
| `auth_cookie_expire` | `1 month` | quanto vive il cookie di sessione |
| `auth_expire` | `5 minutes` | per quanto tempo l’utente connesso viene tenuto in memoria prima di essere riletto |
| `auth_cookie_options` | `{"httponly":true,"security":"lax"}` | le opzioni del cookie di sessione |
| `auth_strict` | `false` | sessioni rigorose |
| `app_session_expire` | `1 day` | quanto dura una sessione di applicazione |
| `cdn` | `https://cdn.componentator.com/` | la CDN dell’interfaccia |
| `language` | `eu` | la lingua predefinita |
| `token`, `sync_token` | generato | il token dell’API degli utenti e del socket di sincronizzazione (entrambe le funzioni sono disattivate per impostazione predefinita) |

La chiave `servicetoken`, con cui l’endpoint di caricamento delle immagini confronta il proprio token di query, **non** è creata dallo script e la schermata di configurazione non la modifica: esiste solo se la aggiungi tu stesso a `cl_config`.

Lo script crea anche il gruppo **Admin** e il primo utente (`info@totaljs.com`, amministratore, confermato) che vi appartiene; vedi [installarlo](/en/openplatform/install-openplatform/).

## I servizi in background

Total.js esegue un servizio ogni minuto. OpenPlatform lo usa (`definitions/init.js`) per:

- svuotare la cache in memoria delle verifiche (ogni 2 minuti);
- salvare le statistiche giornaliere: utenti online, il massimo e il numero per dispositivo (ogni 3 minuti);
- ricaricare la configurazione dal database (ogni 8 ore);
- eliminare le sessioni di applicazione e di piattaforma scadute (ogni 12 ore);
- inviare i riepiloghi via e-mail delle notifiche non lette (ogni 11 minuti, quando la posta è configurata).

## Il database

Tutto vive nello schema PostgreSQL `op`:

| Tabella | Cosa contiene |
|---|---|
| `cl_config` | la configurazione (chiave, valore, tipo) |
| `tbl_user` | gli utenti: profilo, hash della password, flag, contatori e i permessi in cache |
| `tbl_group` | i gruppi |
| `tbl_user_group` | quale utente appartiene a quale gruppo |
| `tbl_session` | le sessioni degli utenti nel portale (dispositivo, indirizzo, scadenza) |
| `tbl_app` | le applicazioni: indirizzo, segreti, flag e indirizzi consentiti |
| `tbl_app_permission` | i permessi che ogni applicazione dichiara |
| `tbl_group_permission` | quali permessi (o solo quali applicazioni) ogni gruppo concede |
| `tbl_app_session` | le sessioni di avvio delle applicazioni e i loro token derivati |
| `tbl_user_app` | per utente e applicazione: i link delle notifiche e se accettano notifiche |
| `tbl_notification` | le notifiche |
| `tbl_visitor` | le statistiche giornaliere dei visitatori |
| `tbl_feedback` | il feedback che gli utenti inviano dal portale |

I file con data `database-2023-09-15.sql`, `database-2024-03-21.sql`, `database-2024-10-22.sql` e `database-2024-10-30.sql` nel repository sono le modifiche dello schema nel tempo, e `database.sql` è lo script completo che esegue il primo avvio. Fai il backup di questo schema come di qualsiasi altro database PostgreSQL.
