# Réglages, services et tables de base de données d’OpenPlatform

> Les clés de configuration qu’OpenPlatform lit, ce que font ses services en arrière-plan et à quoi sert chaque table du schéma op.

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

## Les réglages

OpenPlatform conserve sa configuration dans la table `cl_config` et la charge dans le `CONF` de Total.js au démarrage et toutes les huit heures (`definitions/init.js`). L’écran de configuration lit et enregistre ces clés (`plugins/setup/schemas/settings.js`) :

| Clé | Signification |
|---|---|
| `name`, `icon`, `color` | le nom, le logo et la couleur de la plateforme |
| `url` | l’adresse publique de la plateforme (sans le `/` final). La modifier vide les liens de notification et les sessions d’application ouvertes |
| `language` | la langue par défaut |
| `mail_smtp`, `mail_smtp_options`, `mail_from` | le serveur SMTP, ses options (JSON) et l’expéditeur ; l’écran de configuration peut les tester |
| `$tms`, `secret_tms` | publier les événements par TMS, et le secret de cette connexion |
| `allow_token`, `token` | activer l’API publique `GET /users/` et son jeton |
| `newtab` | ouvrir chaque application dans un nouvel onglet |
| `sync`, `sync_token` | accepter le socket `/sync/` d’autres instances, avec son jeton |

Le premier démarrage (`database.sql`) génère aussi, dans `cl_config`, des valeurs que l’écran de configuration ne modifie pas : l’`id` de l’installation, le `secret` d’authentification, le nom du `cookie`, le `salt` des mots de passe, le `saltchecksum` des sommes de contrôle et le secret de la connexion TMS. Il crée les clés avec ces valeurs par défaut :

| Clé | Par défaut | Signification |
|---|---|---|
| `auth_cookie_expire` | `1 month` | la durée de vie du cookie de session |
| `auth_expire` | `5 minutes` | combien de temps l’utilisateur connecté est gardé en mémoire avant d’être relu |
| `auth_cookie_options` | `{"httponly":true,"security":"lax"}` | les options du cookie de session |
| `auth_strict` | `false` | sessions strictes |
| `app_session_expire` | `1 day` | la durée d’une session d’application |
| `cdn` | `https://cdn.componentator.com/` | le CDN de l’interface |
| `language` | `eu` | la langue par défaut |
| `token`, `sync_token` | généré | le jeton de l’API des utilisateurs et du socket de synchronisation (ces deux fonctions sont désactivées par défaut) |

La clé `servicetoken`, que le point d’accès d’envoi d’image compare à son jeton de requête, n’est **pas** créée par le script et l’écran de configuration ne la modifie pas : elle n’existe que si vous l’ajoutez vous-même à `cl_config`.

Le script crée aussi le groupe **Admin** et le premier utilisateur (`info@totaljs.com`, administrateur, confirmé) qui en fait partie ; voir [l’installer](/en/openplatform/install-openplatform/).

## Les services en arrière-plan

Total.js exécute un service chaque minute. OpenPlatform l’utilise (`definitions/init.js`) pour :

- vider le cache en mémoire des vérifications (toutes les 2 minutes) ;
- enregistrer les statistiques quotidiennes : utilisateurs en ligne, le maximum et le nombre par appareil (toutes les 3 minutes) ;
- recharger la configuration depuis la base de données (toutes les 8 heures) ;
- supprimer les sessions d’application et de plateforme expirées (toutes les 12 heures) ;
- envoyer les résumés par e-mail des notifications non lues (toutes les 11 minutes, quand la messagerie est configurée).

## La base de données

Tout vit dans le schéma PostgreSQL `op` :

| Table | Ce qu’elle contient |
|---|---|
| `cl_config` | la configuration (clé, valeur, type) |
| `tbl_user` | les utilisateurs : profil, hachage du mot de passe, indicateurs, compteurs et permissions en cache |
| `tbl_group` | les groupes |
| `tbl_user_group` | quel utilisateur appartient à quel groupe |
| `tbl_session` | les sessions des utilisateurs dans le portail (appareil, adresse, expiration) |
| `tbl_app` | les applications : adresse, secrets, indicateurs et adresses autorisées |
| `tbl_app_permission` | les permissions que chaque application déclare |
| `tbl_group_permission` | quelles permissions (ou simplement quelles applications) chaque groupe accorde |
| `tbl_app_session` | les sessions de lancement des applications et leurs jetons dérivés |
| `tbl_user_app` | par utilisateur et application : les liens de notification et s’ils acceptent les notifications |
| `tbl_notification` | les notifications |
| `tbl_visitor` | les statistiques quotidiennes des visiteurs |
| `tbl_feedback` | les retours que les utilisateurs envoient depuis le portail |

Les fichiers datés `database-2023-09-15.sql`, `database-2024-03-21.sql`, `database-2024-10-22.sql` et `database-2024-10-30.sql` du dépôt sont les modifications du schéma au fil du temps, et `database.sql` est le script complet que le premier démarrage exécute. Sauvegardez ce schéma comme n’importe quelle autre base de données PostgreSQL.
