# Notificările și endpoint-urile publice ale OpenPlatform

> Trimite o notificare unui utilizator din aplicația ta și folosește API-ul cu token pentru lista de utilizatori, încărcarea imaginilor și socket-ul de sincronizare al mai multor instanțe.

Framework: openplatform
Product: OpenPlatform (openplatform@5)
Language: ro
Content-SHA256: 545db54a0dad8001fa341d0ad13ddbe5523840fc4ab5f5e05d95275172f07da1
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

Pe lângă lansare și verificare, OpenPlatform are câteva endpoint-uri pentru aplicații și pentru alte sisteme. Se află în `controllers/verify.js`, `controllers/api.js` și `controllers/socket.js`.

## Trimiterea unei notificări

Răspunsul verificării conține `notify`, o adresă de forma `<platform url>/notify/?token=<checksum of user and application>`, când utilizatorul acceptă notificări. Aplicația trimite către ea un `POST` cu antetul `x-token` și un corp JSON:

| Câmp | Semnificație |
|---|---|
| `body` | textul notificării |
| `path` | calea din aplicație pe care o deschide notificarea |
| `icon`, `color` | opționale: înlocuiesc pictograma și culoarea aplicației |

Valoarea `x-token` este **token-ul de notificare** pe care OpenPlatform îl derivă pentru acel utilizator și acea aplicație: MD5 al adresei de notificare cu sare `reqtoken` al aplicației și MD5 al acelui rezultat cu sare `restoken` al ei (`FUNC.makenotify` în `definitions/func.js`). Ambele secrete sunt aceleași pe care aplicația le partajează pentru lansare ([înregistrarea unei aplicații](/en/openplatform/register-an-app/)).

OpenPlatform răspunde `Invalid token` când suma de control sau antetul nu se potrivesc și `Not allowed notifications` când utilizatorul sau aplicația nu le acceptă. Verifică și adresele permise ale aplicației și dacă utilizatorul este confirmat, activat și activ. Când totul este în regulă:

1. stochează notificarea (tabelul `tbl_notification`) și crește contorul de necitite al utilizatorului;
2. actualizează sesiunile acelui utilizator deschise în portal, astfel încât contorul apare imediat;
3. publică `Notifications.create` prin TMS când setarea `$tms` este activă;
4. returnează identificatorul notificării.

Pentru utilizatorii care sunt offline și au notificări necitite, o sarcină de serviciu trimite **un rezumat prin e-mail** ("Unread notifications") când setările de poștă sunt configurate, cel mult o dată la trei zile pentru fiecare utilizator (`definitions/init.js`).

## API-ul utilizatorilor (un token)

`GET /users/` returnează grupurile și utilizatorii platformei ca JSON. Este **dezactivat** până când sunt setate `allow_token` și `token`. Apelantul trimite token-ul ca parametru de interogare `token` sau ca antet `x-token`; încercările greșite repetate sunt blocate. Utilizatorii vin fără secrete: identificator, referință, limbă, gen, fotografie (o adresă absolută), nume, e-mail, culoare, preferințe, indicatori (`sa`, `isdisabled`, `isinactive`, `isonline`), date și id-urile grupurilor lor.

## Încărcarea unei imagini

`POST /upload/base64/` (până la 2 MB) acceptă un corp JSON cu numele fișierului și `file` ca data URI și doar **JPEG**. Are nevoie de un utilizator autentificat sau de token-ul de interogare din setarea `servicetoken` (vezi [setări și baza de date](/en/openplatform/settings-and-database/) pentru de unde vine acea cheie). Imaginea este stocată în stocarea de fișiere `files`, iar răspunsul este adresa ei, `/files/<id and checksum>.jpg`; adresa funcționează doar cu suma de control.

## Mai multe instanțe: socket-ul de sincronizare

`SOCKET /sync/` conectează instanțe OpenPlatform. Un client este acceptat când setarea `sync` este activă și `token` din interogare este egal cu `sync_token`; orice alt client este închis cu codul `4001` la o jumătate de secundă după deschidere. Mesajele unui client confirmat sunt retransmise celorlalți, iar cât timp un client confirmat se reconectează, mesajele sunt puse în coadă cel mult zece secunde.
