L’API d’administration du CMS de Total.js : gérer un site depuis le code, sauvegarde et restauration
Tout ce que fait l’interface d’administration passe par un seul point d’entrée : POST /admin/ avec le corps { "schema": "<name>", "data": { ... } } (les routes API de Total.js, voir routes API). L’adresse vient de la ligne $api : /admin/ du fichier config. Authentifiez-vous avec le cookie de session (POST /admin/ avec schema: "login" et le login et le password), avec l’en-tête x-token ou via OpenPlatform (installation et premier démarrage).
Les actions
| Plugin | Appels (schema) | Permission |
|---|---|---|
| Account | login, logout, admin_read, admin_save (nom, login, mot de passe), account | la session |
| Pages | pages_list, pages_read, pages_save, pages_clone, pages_remove, pages_links, pages_html (lit le HTML), pages_save_html (id, html, jusqu’à 5 MB), pages_copy (from, to) | pages |
| Layouts | layouts_list, layouts_read, layouts_save, layouts_clone, layouts_remove, layouts_html, layouts_save_html, layouts_import | layouts |
| Widgets | widgets_list, widgets_read, widgets_save, widgets_remove, widgets_detail | widgets |
| Navigation | nav_list, nav_read, nav_save, nav_remove, nav_editor | navigation |
| Redirects | redirects_list, redirects_read, redirects_save (url, target, permanent), redirects_remove | redirects |
| Variables | variables_read, variables_save (vars) | variables |
| Posts | posts, posts_read, posts_create, posts_update, posts_remove, posts_clear, posts_categories | posts |
| Files | files_list, files_rename, files_clear, files_remove, et les envois ci-dessous | files |
| Settings | settings_read, settings_save, settings_test (essaie les réglages SMTP), chatgpt | settings |
| Dashboard | dashboard_online, dashboard_referers, dashboard_browsers, dashboard_pages, dashboard_stats | aucune |
La permission admin (et tout utilisateur avec le drapeau sa, y compris le Bot du jeton) a accès à tous les appels. Un appel sans permission reçoit une erreur, et login est le seul appel qui n’a pas besoin de session.
Créer une page et son contenu :
{ "schema": "pages_save", "data": { "name": "About", "layoutid": "<layout id>", "url": "/about/", "title": "About us" } }
{ "schema": "pages_save_html", "data": { "id": "<page id>", "html": "<h1>About us</h1>" } }pages_save répond { "success": true } ; lisez l’id avec pages_list. Pour un layout, layouts_save répond l’id du layout dans value. Quand un champ manque dans une mise à jour, le champ est vidé (un title que vous n’envoyez pas est enregistré vide), envoyez donc l’enregistrement complet.
Envoyer des fichiers
POST /admin/upload/ accepte un envoi multipart (jusqu’à 10 Mo) et POST /admin/upload/base64/ un corps JSON avec un data URI (png, jpeg ou gif). Les deux répondent une liste de { id, name, type, ext, size, url }, où url vaut /download/<id>.<ext>.
Sauvegarde, restauration et effacement
Trois routes de controllers/api.js agissent sur tout le site et exigent la permission admin :
| Route | Ce qu’elle fait |
|---|---|
GET /admin/backup/ | télécharge tout le stockage de fichiers (métadonnées, HTML des pages et des layouts, fichiers et articles) sous la forme d’un fichier texte nommé d’après le site et la date |
POST /admin/restore/ | envoie un tel fichier (jusqu’à 100 Mo) et le charge. |
GET /admin/clear/ | supprime le contenu du site. Il abandonne le stockage de fichiers et le recharge, de sorte que pages, layouts, widgets et le reste sont supprimé |
Faites une sauvegarde avant d’essayer l’une d’elles, n’ouvrez jamais /admin/clear/ dans un navigateur par curiosité et gardez le jeton privé : avec lui, un seul GET vide le site.