Added
- Pulsante + in header/FAB: fuori dalla home apre un dialog con lo stesso
composer della home (layout e opzioni identici); alla pubblicazione si
va al dettaglio del post. In home resta lo scroll/focus sul composer
inline.
- Voce Copia link nel menu di ogni post: copia l'URL locale del post
negli appunti.
- Impostazione admin Mostra amministrazione sulla home: rende
visibile o nasconde il blocco guest con amministratori e moderatori
dell'istanza (default: visibile).
- Pannello admin Database (
/admin/database): dimensioni e righe
eliminabili per tabelle operative (inbox grezzo, job falliti, cache,
sessioni, token reset); pulizia singola o totale con retention di 24 ore
(le voci inbox pending non vengono mai eliminate).
- Pulizia database automatica in
openbook:cron(openbook:purge-database):
al massimo una volta ogni 24 ore, stessa retention del pannello admin.
Fixed
- Post con GIF animate (locali o federati): le immagini inline nel content
HTML remoto vengono estratte come allegati in galleria; gli upload locali
conservano l'animazione (niente ricodifica GD) e nel feed si usa il file
originale anziche' una miniatura statica. Supporto anche alle GIF Mastodon
convertite in MP4 loop (video/mp4 in attachment o tag <video> inline).
- Impostazioni admin: salvataggio solo in database; il file
.envnon viene
piu' riscritto dal pannello (modifica manuale o installer al primo setup).
- Pagine
/regolee/privacy: layout a tutta larghezza della colonna
centrale, allineato al resto del sito (niente colonna stretta da 420px).
- Sidebar sinistra: firma in fondo con nome istanza (link alla home locale)
e link al progetto Openbook, come nel footer globale.
- Moderazione utenti: sospensione/disabilitazione sincronizzano lo stato
ActivityPub (actors.status); esclusi da "Persone da seguire" e ricerca;
profilo sospeso oscurato, profilo disabilitato 404. Migrazione allinea i
dati gia\' presenti.
- Like/unlike su post e commenti via Ajax: niente piu' ricarica della
timeline che riporta in cima. Senza JS resta il redirect con anchor
(#post-… / #commento-…).
- Nelle Note ActivityPub in uscita, i link HTML delle menzioni remote
usano l'URI ActivityPub dell'attore (es. openb.app) e non la pagina
locale /attori/…: su Mastodon e simili la menzione apre l'istanza
di destinazione. Dentro Openbook restano i link alla cache locale.
- Firme HTTP in ingresso da tags.pub / activitypub-bot / Mastodon 4.5+:
- keyId su documento CryptographicKey (…/publickey): si usa la PEM
gia' in cache dall'Actor (dopo il Follow) oppure si recupera il
documento chiave *senza* authorized fetch (i GET firmati verso
tags.pub spesso tornano 400);
- verifica RFC 9421 (Signature-Input / Content-Digest), anche senza
alg e con spazi dopo ; come Mastodon; fallback a draft-cavage;
Digest sha-256 case-insensitive.
- Log federation.delivery_queued / delivery_ok / delivery_rejected /
delivery_skipped per diagnosticare Follow in uscita; se l'Actor remoto
non ha inbox in cache si ritenta un refresh prima di abbandonare.
- Follow remoti bloccati in pending senza Accept (tags.pub / activitypub-bot
aggiunge ai followers ma non consegna l'Accept): dopo un Follow 2xx si
verifica la collection followers remota e si conferma in locale
(openbook:confirm-outgoing-follows nel cron).
Sblocca Accept/follow-back da bot come @_followback@tags.pub.
- Announce (boost) da Person/bot di Note remote non ancora in cache: si
recupera/incorpora il post come gia' per i Group, cosi' le ricondivisioni
di bot seguiti (es. tags.pub) compaiono nel feed. Prima venivano ignorate
se l'oggetto non era un post locale gia' presente in DB. Se l'Announce
porta solo l'URI (tipico tags.pub), si recupera anche l'Actor autore
remoto via fetch — senza di cio' restavano ignored in inbox_items.
- Citazioni remote (
quoteUrl/quoteFEP-044f /_misskey_quote): il
post citato viene recuperato in cache e mostrato nella card annidata
(ob-post__quote), togliendo dal testo il fallback "RE: …" / link nudo.
- "Recupera aggiornamenti" su un post remoto con un proprio commento locale
nella collection replies: non fallisce piu' con UniqueConstraint (non si
tenta di re-ingerire il commento locale ne' di creare un Actor remoto
sul dominio dell'istanza).
- Inbox forwarding ActivityPub: se la firma HTTP e' di un Actor diverso da
activity.actor (tipico delle risposte inoltrate), si autentica l'attivita'
in ordine con (1) Linked Data Signature RsaSignature2017 (stile Mastodon)
e (2) GET same-origin sull'id dichiarato. Le attivita' in uscita vengono
firmate anche con LD Signature, cosi' i peer possono inoltrarle. Sblocca i
commenti remoti ai thread che prima restavano actor_mismatch.