API-ul de administrare al CMS-ului Total.js: gestionează un site din cod, backup și restaurare
Tot ce face interfața de administrare trece printr-un singur endpoint: POST /admin/ cu corpul { "schema": "<name>", "data": { ... } } (rutele API ale Total.js, vezi rutele API). Adresa vine din linia $api : /admin/ a fișierului config. Autentifică-te cu cookie-ul de sesiune (POST /admin/ cu schema: "login" și login și password), cu antetul x-token sau prin OpenPlatform (instalare și prima pornire).
Acțiunile
| Plugin | Apeluri (schema) | Permisiune |
|---|---|---|
| Account | login, logout, admin_read, admin_save (nume, login, parolă), account | sesiunea |
| Pages | pages_list, pages_read, pages_save, pages_clone, pages_remove, pages_links, pages_html (citește HTML-ul), pages_save_html (id, html, până la 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, și încărcările de mai jos | files |
| Settings | settings_read, settings_save, settings_test (încearcă setările SMTP), chatgpt | settings |
| Dashboard | dashboard_online, dashboard_referers, dashboard_browsers, dashboard_pages, dashboard_stats | niciuna |
Permisiunea admin (și orice utilizator cu marcajul sa, inclusiv Bot-ul tokenului) le poate folosi pe toate. Un apel fără permisiune primește o eroare, iar login este singurul apel care nu are nevoie de sesiune.
Creează o pagină și conținutul ei:
{ "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ăspunde { "success": true }; citește id-ul cu pages_list. Pentru un layout, layouts_save răspunde cu id-ul layoutului în value. Când într-o actualizare lipsește un câmp, câmpul este golit (un title pe care nu îl trimiți se salvează gol), așa că trimite înregistrarea întreagă.
Încărcarea fișierelor
POST /admin/upload/ primește o încărcare multipart (până la 10 MB), iar POST /admin/upload/base64/ un corp JSON cu un data URI (png, jpeg sau gif). Ambele răspund cu o listă de { id, name, type, ext, size, url }, unde url este /download/<id>.<ext>.
Backup, restaurare și golire
Trei rute din controllers/api.js lucrează pe tot site-ul și cer permisiunea admin:
| Rută | Ce face |
|---|---|
GET /admin/backup/ | descarcă tot spațiul de stocare de fișiere (metadate, HTML-ul paginilor și layouturilor, fișiere și articole) ca un singur fișier text numit după site și dată |
POST /admin/restore/ | încarcă un astfel de fișier (până la 100 MB) și îl încarcă în site. |
GET /admin/clear/ | șterge conținutul site-ului. Renunță la spațiul de stocare de fișiere și îl încarcă din nou, așa că paginile, layouturile, widgeturile și restul sunt eliminat |
Fă un backup înainte să încerci oricare dintre ele, nu deschide niciodată /admin/clear/ într-un browser din curiozitate și ține tokenul privat: cu el, un singur GET golește site-ul.