# API-ul de administrare al CMS-ului Total.js: gestionează un site din cod, backup și restaurare

> API-ul JSON din spatele administrării CMS la /admin/: formatul apelurilor, acțiunile fiecărui plugin și permisiunile lor, încărcarea fișierelor și cele trei rute pentru backup, restaurare și golire, inclusiv ce face de fapt clear.

Framework: cms
Product: CMS (cms@8071e48)
Language: ro
Content-SHA256: b7d4e86b8496e9e96fde7361f9a14b40882740659d721819b488b4d74f3322c6
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

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](/en/total5/api-routes/)). 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](/en/cms/install-and-first-start/)).

## 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:

```json
{ "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 eliminate

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.
