{"revision":"0ed62d2c742f8e20","language":"it","entry":{"id":"chat-api","group":"guides","kind":"guide","title":"L’API della chat di Veil","summary":"Leggi e scrivi nella chat di veil.rip/chat/ con la chiave di una scheda, e controlla chi ha firmato ogni messaggio.","sections":[{"kind":"paragraph","text":"La chat non è ancora aperta. Questa pagina descrive l’API che servirà a https://veil.rip/chat/api/, sulla stessa origine della rubrica, così un browser che tiene la chiave di dispositivo di una scheda è già dentro. L’utente della chat è la scheda: nome, immagine, badge e account verificati vengono dalla scheda, e la chat non scrive niente nel registro."},{"kind":"heading","text":"Firma una richiesta"},{"kind":"code","language":"text","code":"veil-chat:request:v1\nPOST /chat/api/servers\n<exact UTF-8 JSON body with ts and nonce>\n"},{"kind":"paragraph","text":"Manda la chiave di dispositivo della scheda in X-Veil-Key (hex) e la firma Ed25519 in X-Veil-Signature (base64). Il corpo porta ts, un’ora ISO 8601 UTC entro due minuti dall’orologio del server, e nonce, 16 o più byte casuali in base64url, usato una volta sola. Una GET o una DELETE mette ts e nonce nella query e firma un corpo vuoto. La chat controlla che la chiave sia una chiave di dispositivo attiva di una scheda con GET /v1/keys/{key}. I byte firmati finiscono con un a capo dopo il corpo, che non si manda (una GET firma un corpo vuoto e poi l’a capo): un blocco firma non finisce mai così, quindi nessuno passa per una richiesta."},{"kind":"heading","text":"Firma un messaggio"},{"kind":"code","language":"text","code":"veil-chat:message:v1\nchannel:<id>\n<ts>\n<nonce>\n<text>"},{"kind":"paragraph","text":"Chi scrive firma ogni messaggio con la stessa chiave, per un canale, un thread o una bacheca. La chat conserva i byte firmati e la firma come arrivano e li serve con il messaggio, insieme a card e key. Per controllare un messaggio decodifica signedBytes dal base64, verifica la firma con key e controlla con GET /v1/keys/{key}/active-at?t=<secondi unix> che la chiave fosse una chiave attiva di quella scheda in quel momento. Un messaggio di una chiave revocata dopo si verifica ancora alla sua data."},{"kind":"heading","text":"Il riferimento"},{"kind":"paragraph","text":"Ogni endpoint, evento e codice d’errore della chat è in chat/docs/api-chat.md nei sorgenti di Veil: server, canali, ruoli con i bit dei permessi della vecchia chat, inviti, messaggi, menzioni, contatori dei non letti, thread, bacheche, la moderazione dello staff e il WebSocket a wss://veil.rip/chat/ws."}],"related":["signed-requests","message-verification","key-at-time"],"documentationUrl":"https://veil.rip/docs/chat-api?lang=it"}}