Novità

9 min di lettura

Novità

Informazioni più dettagliate sulle modifiche in ogni versione sono disponibili direttamente su GitHub Releases.

v3.0.0

  • 🔑 Nuovo endpoint di login (breaking): il metodo JSON-RPC get_jwt è sostituito da POST /{prefix}/{database}/token, che accetta login e password PostgreSQL come autenticazione HTTP Basic — le credenziali non viaggiano più nel corpo della richiesta e un reverse proxy può limitare i login per URL. get_jwt su /jsonrpc ora risponde 404 / -32601. Migrazione: curl -X POST …/token -u login:password.
  • 📥 Download di file: il nuovo endpoint POST /{prefix}/{database}/file serve file binari da funzioni PostgreSQL che restituiscono insiemi di righe — una riga direttamente, più righe come ZIP in streaming — con la stessa autenticazione, cambio di ruolo e rate limiting di JSON-RPC. capabilities() riporta kind: "file". Riapplica sql/schema.sql (è idempotente) per ottenere i nuovi campi.
  • 🧰 Strumenti: nuovo JWT Signer, che firma i token localmente nel browser da un JWT_SECRET inserito a mano (nessun accesso alla rete, il segreto non viene mai salvato), screenshot e versioni ospitate di ogni strumento (explorer., sse-tester., jwt-getter., jwt-signer.pgarachne.com), schede cliccabili e collegamenti incrociati. Le cartelle in tools/ sono state rinominate explorer, jwt-getter e sse-tester: aggiorna STATIC_FILES_PATH se le servi.
  • 🐛 Correzioni e hardening: una funzione che restituisce NULL SQL ora produce "result": null invece di HTTP 500; i percorsi ZIP di /file rifiutano nomi ostili a Windows e collisioni senza distinzione tra maiuscole e minuscole; i risultati vuoti vengono annullati (rollback).
  • 📚 Documentazione e dipendenze: Quick Start passo dopo passo, pagina JSON-RPC come pura referenza, la decisione architetturale «Perché PostgreSQL», indicazioni sul reverse proxy per download di grandi dimensioni e moduli Go aggiornati (aggiornamento di sicurezza di golang.org/x/net).

v2.2.0

  • 🔑 JWT opzionale: JWT_SECRET non è più obbligatorio. Senza di esso JWT è disattivato (get_jwt restituisce 404 / -32601) e i client usano credenziali HTTP Basic o token API.
  • 🛡️ Limite di tentativi per tutti i metodi di autenticazione (sicurezza): LOGIN_RATE_LIMIT ora copre anche HTTP Basic e Bearer (JWT/token API) su tutti gli endpoint, non solo get_jwt. In precedenza le password potevano essere indovinate senza limiti tramite Authorization: Basic.
  • 🔒 Accesso governato solo dai privilegi (breaking): pgarachne.allowed_schemas() è stata rimossa. capabilities() (e quindi MCP tools/list e l’export OpenAPI) elenca ogni funzione jsonb che il chiamante può eseguire e del cui schema può fare uso. Revocate EXECUTE/USAGE dove non desiderato; vedere la pagina Sicurezza.
  • ⚠️ Altre modifiche incompatibili: save_idempotency_key ora accetta un ambito per ruolo (riapplicare sql/schema.sql prima di aggiornare il binario), universal_update/universal_delete rifiutano filtri vuoti a meno che non sia passato "all": true, e universal_read accetta in select solo * o semplici nomi di colonna (chiude una falla di SQL injection).
  • 🐛 Correzioni: deadlock SSE alla riconnessione del listener, login lenti o con password errata che bloccavano altre richieste, rendering degli argomenti in MCP prompts/get, un commento di funzione malformato che rompeva capabilities, risultati «falsy» mostrati come errori nell’Explorer e un XSS nella vista dei risultati dell’Explorer.
  • 📚 Documentazione: nuovo llms-full.txt, scheda GitHub Sponsors, tooltip sulle icone della barra di navigazione; questa pagina ora elenca anche v2.0.3 e v2.1.0.

v2.1.0

  • 📄 Esportazione OpenAPI per metodo: generate_openapi_spec() ora genera anche un percorso di sola documentazione per ogni metodo esposto, per gli strumenti che si aspettano un’operazione per percorso (Swagger UI, Postman, generatori di codice). Un nuovo endpoint openapi.yaml restituisce la stessa specifica in formato YAML.
  • 🔒 Esportazione OpenAPI autenticata e filtrata per ruolo: /openapi.json ora richiede la stessa autenticazione di /jsonrpc ed elenca solo i metodi che il ruolo del chiamante può eseguire — in precedenza l’endpoint non era autenticato ed elencava tutti i metodi a chiunque.
  • 🔌 Aggiornamento del protocollo MCP: l’endpoint MCP ora parla esclusivamente la versione di protocollo 2026-07-28; il vecchio handshake initialize/ping non è più supportato. Consulta AGENTS.md per il riferimento completo.
  • 🐛 Correzione del pool di connessioni: i pool di connessione per l’autenticazione diretta (Basic Auth) vengono ora correttamente rimossi quando inattivi, risolvendo un problema per cui la normale rotazione delle password poteva col tempo bloccare l’accesso con le nuove credenziali.
  • 📦 Aggiornamento delle dipendenze e della CI: normale aggiornamento delle dipendenze Go (ora richiede Go 1.26) e relativi aggiornamenti degli strumenti CI.

v2.0.3

  • 🔒 Rafforzamento della sicurezza: il cambio di ruolo non costruisce più SQL tramite concatenazione di stringhe (usa invece la funzione parametrizzata set_config()), la distribuzione dei file statici ora risolve i percorsi tramite os.Root in modo che un symlink non possa uscire dalla directory servita, permessi più rigidi per i file di log/PID e una validazione più severa dei link ai risultati di ricerca del sito di documentazione.
  • 🚀 Nuova pagina Quick Start (tutte le 10 lingue): un percorso rapido dall’installazione a un endpoint funzionante, senza la deviazione completa per Installazione/Configurazione.
  • 📄 Individuabilità di llms.txt: collegato dalla homepage, dalla pagina MCP, dal README e dall’intestazione di ogni pagina, così i crawler LLM possono trovarlo.
  • 🐛 Correzioni: il toggle del menu mobile ora mostra correttamente un pulsante Home funzionante sugli schermi larghi, i link della pagina 404 personalizzata ora si risolvono correttamente indipendentemente dalla profondità dell’URL, e il menu mobile ha ottenuto una voce «Home».

v2.0.2

  • 🔒 Rafforzamento della sicurezza: Risolti diversi rilievi dell’analisi statica — le chiavi della cache del pool di autenticazione diretta usano ora HMAC (invece di un semplice SHA-256), un controllo di contenimento esplicito per la distribuzione dei file statici, l’escaping HTML del testo di stato di login dello SSE Tester, una allowlist degli schemi URL per i link ai risultati di ricerca del sito di documentazione, e permessi a privilegio minimo nel workflow CI.
  • 📦 Aggiornamento delle dipendenze: Aggiornate tutte le dipendenze Go, tra cui gin-gonic/gin alla v1.12.0 e lib/pq alla v1.12.3 (ora richiede Go 1.25).
  • 🌐 3 nuove lingue: Il sito di documentazione è ora disponibile anche in polacco, ucraino e greco — 10 lingue in totale.

v2.0.1

  • 🔒 Correzione di sicurezza: Aggiornata la dipendenza transitiva HTTP/3 quic-go alla v0.59.1, chiudendo una vulnerabilità di espansione dei trailer QPACK che poteva consentire a un peer malevolo di esaurire la memoria del server o del client.
  • 🎨 Miglioramenti al sito della documentazione: Nuovo selettore di tema chiaro/scuro/automatico e selettore di lingua solo a icone, link a icona GitHub/Supporto nella barra di navigazione, corretti i dati strutturati JSON-LD codificati due volte, e un llms.txt ampliato.

v2.0.0

  • 🔒 Valori predefiniti sicuri (con modifiche incompatibili): DB_SSLMODE ora è require di default, ALLOWED_ORIGINS non è più * di default e JWT_SECRET deve avere almeno 32 byte. I deployment esistenti devono rivedere la configurazione prima dell’aggiornamento.
  • 🧹 Pulizia del codice legacy: Rimossi i percorsi di reindirizzamento /api/… e /sse/… e l’alias JSON-RPC deprecato login. Usa direttamente /{prefix}/:database/… e get_jwt.
  • 🛡️ Autenticazione e gestione errori più rigorose: Un nuovo limite di login per IP (LOGIN_RATE_LIMIT_PER_IP) chiude una falla di credential spraying, e gli errori degli strumenti MCP non espongono più il testo grezzo degli errori PostgreSQL per default (riattivabile con MCP_SQL_ERROR_DETAIL).
  • ⚙️ Limiti di connessione configurabili: Il limite del pool di connessioni per l’autenticazione diretta è ora configurabile tramite DIRECT_POOL_LIMIT.
  • 🔑 Supporto per IdP esterni (BYO JWT): Le nuove impostazioni JWT_ISSUER, JWT_AUDIENCE e JWT_LEEWAY associano i token emessi a un emittente/pubblico specifico e permettono di regolare la tolleranza di sfasamento orario.
  • 🧰 Nuovi strumenti: Un JWT Getter (/tools/get-jwt) e un SSE Tester (/tools/test-sse) autonomi si uniscono all’Explorer per test manuali rapidi.
  • 🐛 Correzioni di stabilità: Risolto un blocco nello spegnimento SSE e un bug nel ripristino delle connessioni morte che poteva impedire al server di riconnettersi a PostgreSQL.
  • 🧪 Rafforzamento della CI: Aggiunti golangci-lint, il race detector di Go e govulncheck a ogni build, oltre a una maggiore copertura dei test.
  • 📦 Processo di rilascio: Aggiunto CHANGELOG.md e suddiviso il flusso di rilascio in make release-local (build e verifica) e make release (tag, pubblicazione, aggiornamento del tap Homebrew).

v1.3.0

  • 🌐 PgArachne Explorer – PWA moderno: Completo rinnovamento visivo e funzionale – tema scuro/chiaro (automatico), layout a schede responsive, evidenziazione della sintassi JSON, pulsante copia negli appunti, migliore UX di autenticazione (schede password/token), supporto all’installazione PWA (manifest, icone, service worker), link condivisibili tramite parametro ?url=….
  • 🛠️ Supporto Model Context Protocol (MCP): Nuovo endpoint /{prefix}/{db}/mcp con i metodi standard resources/list, resources/read, prompts/list, prompts/get – interamente supportato da funzioni PostgreSQL e che riutilizza l’autenticazione e il cambio di ruolo esistenti.
  • 🔧 Prefisso API configurabile: Il valore predefinito è stato modificato in /db/{database}/jsonrpc e /db/{database}/sse, i vecchi percorsi /api/… e /sse/… restano disponibili come redirect 307 per compatibilità. Controllato tramite la variabile d’ambiente API_PREFIX.
  • 🛡️ Protezione idempotenza: Campo opzionale idempotencyKey nelle richieste JSON-RPC – rilevamento automatico dei duplicati (HTTP 409 + codice errore in caso di collisione) utilizzando pgarachne.save_idempotency_key().
  • 📚 Miglioramenti alla documentazione: Nuova sezione /tools/ con schede (Explorer + prossima barra degli strumenti per macOS), nuova pagina “Architectural Decisions”, SECURITY.md con istruzioni per la segnalazione di vulnerabilità, migliore tipografia in tutte le lingue tramite TypoLima, supporto migliorato per la pagina 404 per GitHub Pages.
  • 📝 Rinominato metodo di accesso: Il metodo JSON-RPC login è stato rinominato in get_jwt (il vecchio nome rimane come alias deprecato con avviso nei log).
  • 📊 Pulizia della registrazione (logging): Quando si registra su file, la console mostra solo informazioni minime di avvio → output più pulito in ambienti di produzione/docker.

v1.2.0

  • 🛡️ Sicurezza: La validazione dei token di accesso avviene prima di stabilire una connessione al database. Migliorata la protezione contro l’IP spoofing (aggiunta l’impostazione TRUSTED_PROXIES) e mascheramento degli errori interni del database per l’utente finale.
  • 📊 Metriche isolate: L’endpoint Prometheus /metrics è stato spostato dall’API pubblica a una porta sicura dedicata (di default disponibile solo su 127.0.0.1:9090).
  • 📦 Nuova opzione di installazione: Il progetto ora ha un tap Homebrew ufficiale per macOS e Linux. Le build sono firmate e generate tramite GoReleaser.
  • 📚 Documentazione riprogettata: Look completamente nuovo basato sul framework Hugo. Aggiunta una ricerca full-text ultra rapida, la possibilità di copiare il codice e resi disponibili esempi di deployment in produzione (Nginx hardening, BYO JWT).
  • ⚙️ Gestione del demone migliorata: Aggiunto il supporto per la configurazione personalizzata del percorso PID_FILE.

v1.1.0

  • 🔌 API unificata: Chiamate tramite POST /api/<db> (il metodo chiamato è specificato nel corpo JSON-RPC).
  • ⚡ Notifiche in tempo reale: Nuovo endpoint GET /sse/<db>?channels=... per l’ascolto di eventi del database con supporto multicanale.
  • 📈 Osservabilità: Metriche Prometheus dettagliate per HTTP, auth, JSON-RPC e SSE.
  • 🏋️ Importanti miglioramenti della stabilità: Protezione contro client lenti, timeout rigorosi e pulizia automatica delle connessioni.