# A API do admin do CMS do Total.js: gerir um site a partir de código, cópia de segurança e restauro

> A API JSON por trás do admin do CMS em /admin/: o formato das chamadas, as ações de cada plugin e as suas permissões, o envio de ficheiros e as três rotas de cópia de segurança, restauro e limpeza, incluindo o que o clear realmente faz.

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

Tudo o que a interface do admin faz passa por um único endpoint: `POST /admin/` com o corpo `{ "schema": "<name>", "data": { ... } }` (as rotas API do Total.js, veja [rotas API](/en/total5/api-routes/)). O endereço vem da linha `$api : /admin/` do ficheiro `config`. Autentique-se com o cookie de sessão (`POST /admin/` com `schema: "login"` e o `login` e o `password`), com o cabeçalho `x-token` ou através do OpenPlatform ([instalação e primeiro arranque](/en/cms/install-and-first-start/)).

## As ações

| Plugin | Chamadas (`schema`) | Permissão |
|---|---|---|
| Account | `login`, `logout`, `admin_read`, `admin_save` (nome, login, palavra-passe), `account` | a sessão |
| Pages | `pages_list`, `pages_read`, `pages_save`, `pages_clone`, `pages_remove`, `pages_links`, `pages_html` (lê o HTML), `pages_save_html` (`id`, `html`, até 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 os envios abaixo | `files` |
| Settings | `settings_read`, `settings_save`, `settings_test` (testa as definições SMTP), `chatgpt` | `settings` |
| Dashboard | `dashboard_online`, `dashboard_referers`, `dashboard_browsers`, `dashboard_pages`, `dashboard_stats` | nenhuma |

A permissão `admin` (e todo o utilizador com a marca `sa`, incluindo o *Bot* do token) tem acesso a todas. Uma chamada sem permissão recebe um erro, e `login` é a única chamada que não precisa de sessão.

Crie uma página e o seu conteúdo:

```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` responde `{ "success": true }`; leia o id com `pages_list`. Num layout, `layouts_save` responde o id do layout em `value`. Quando falta um campo numa atualização, o campo é limpo (um `title` que não envie fica guardado vazio), por isso envie o registo completo.

## Enviar ficheiros

`POST /admin/upload/` aceita um envio multipart (até 10 MB) e `POST /admin/upload/base64/` um corpo JSON com um data URI (png, jpeg ou gif). Ambos respondem com uma lista de `{ id, name, type, ext, size, url }`, onde `url` é `/download/<id>.<ext>`.

## Cópia de segurança, restauro e limpeza

Três rotas de `controllers/api.js` atuam sobre todo o site e precisam da permissão `admin`:

| Rota | O que faz |
|---|---|
| `GET /admin/backup/` | descarrega todo o armazenamento de ficheiros (metadados, HTML de páginas e layouts, ficheiros e artigos) como um único ficheiro de texto com o nome do site e a data |
| `POST /admin/restore/` | envia um ficheiro assim (até 100 MB) e carrega-o. |
| `GET /admin/clear/` | **apaga o conteúdo do site.** Descarta o armazenamento de ficheiros e carrega-o de novo, pelo que páginas, layouts, widgets e o resto são removidos

Faça uma cópia de segurança antes de experimentar qualquer uma delas, nunca abra `/admin/clear/` num navegador por curiosidade e mantenha o token privado: com ele, um único `GET` esvazia o site.
