L’API dell’admin del CMS di Total.js: gestire un sito da codice, backup e ripristino
Tutto ciò che fa l’interfaccia dell’admin passa da un unico endpoint: POST /admin/ con il corpo { "schema": "<name>", "data": { ... } } (le route API di Total.js, vedi route API). L’indirizzo viene dalla riga $api : /admin/ del file config. Autenticati con il cookie di sessione (POST /admin/ con schema: "login" e login e password), con l’intestazione x-token o tramite OpenPlatform (installazione e primo avvio).
Le azioni
| Plugin | Chiamate (schema) | Permesso |
|---|---|---|
| Account | login, logout, admin_read, admin_save (nome, login, password), account | la sessione |
| Pages | pages_list, pages_read, pages_save, pages_clone, pages_remove, pages_links, pages_html (legge l’HTML), pages_save_html (id, html, fino a 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, e i caricamenti qui sotto | files |
| Settings | settings_read, settings_save, settings_test (prova le impostazioni SMTP), chatgpt | settings |
| Dashboard | dashboard_online, dashboard_referers, dashboard_browsers, dashboard_pages, dashboard_stats | nessuno |
Il permesso admin (e ogni utente con il flag sa, incluso il Bot del token) può usarle tutte. Una chiamata senza permesso riceve un errore, e login è l’unica chiamata che non richiede una sessione.
Crea una pagina e il suo contenuto:
{ "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 risponde { "success": true }; leggi l’id con pages_list. Per un layout, layouts_save risponde con l’id del layout in value. Quando in un aggiornamento manca un campo, il campo viene svuotato (un title che non invii viene salvato vuoto), quindi invia il record completo.
Caricare file
POST /admin/upload/ accetta un caricamento multipart (fino a 10 MB) e POST /admin/upload/base64/ un corpo JSON con un data URI (png, jpeg o gif). Entrambi rispondono con un elenco di { id, name, type, ext, size, url }, dove url è /download/<id>.<ext>.
Backup, ripristino e svuotamento
Tre route di controllers/api.js agiscono sull’intero sito e richiedono il permesso admin:
| Route | Cosa fa |
|---|---|
GET /admin/backup/ | scarica tutto l’archivio di file (metadati, HTML di pagine e layout, file e post) come un unico file di testo con il nome del sito e la data |
POST /admin/restore/ | carica un file così (fino a 100 MB) e lo carica nel sito. |
GET /admin/clear/ | elimina il contenuto del sito. Scarta l’archivio di file e lo ricarica, quindi pagine, layout, widget e il resto vengono rimoss |
Fai un backup prima di provarne una qualsiasi, non aprire mai /admin/clear/ in un browser per curiosità e tieni privato il token: con quello, un solo GET svuota il sito.