Files
urbackup/MEMORY.md
mariano 1dc84aa5eb Stable
2026-05-20 09:20:27 +02:00

12 KiB

UrBackup Plugin - Memoria di Sviluppo

📋 Informazioni Plugin

  • Nome: UrBackup
  • Versione: 0.4.2
  • Compatibilità: GLPI 11.0.6+, PHP 8.3+
  • Namespace: GlpiPlugin\Urbackup

Funzionalità Implementate

Installazione/Disinstallazione

  • Installazione plugin tramite CLI: php bin/console glpi:plugin:install urbackup
  • Attivazione: php bin/console glpi:plugin:activate urbackup
  • Disinstallazione: php bin/console glpi:plugin:uninstall urbackup

Struttura File

  • setup.php: Hook di inizializzazione, menu, tab, versione, prerequisiti
  • hook.php: Funzioni di installazione (spostate in setup.php per OPcache)
  • src/: Classi namespaced con namespace GlpiPlugin\Urbackup
  • install/: Script di installazione e disinstallazione database
  • front/: Pagine PHP per lista server e form
  • ajax/: Endpoint AJAX per test API (server_test.php)

Classi Principali

Classe Descrizione
Config Configurazione plugin, tipi asset abilitati
Profile Diritti utente, permessi
Server Server UrBackup (CRUD)
ServerAsset Linking asset-server
AssetTab Tab visualizzato sugli asset
MassiveAction Azioni massive
UrbackupApiClient Client API per comunicazione con UrBackup server
LocationHelper Helper per assegnazione server basata su location
Controller/ServerController Symfony controller per routes server
Controller/AssetController Symfony controller per azioni asset
Command/TestApiCommand CLI command per test API

Pagine Frontend

  • front/config.form.php: Pagina configurazione plugin
  • front/server.php: Lista server UrBackup
  • front/server.form.php: Form aggiunta/modifica server
  • front/asset.form.php: Form azioni su asset (connect/disconnect/start backup)
  • ajax/server_test.php: Endpoint AJAX per test connessione API

Interfacce GLPI

  • Menu: Amministrazione → Server UrBackup
  • Tab: UrBackup su Computer e asset abilitati
  • Configurazione: Abilitazione tipi asset (legacy + Asset Definition GLPI 11)

🔧 Fix e Correzioni Applicate

  1. OPcache: Funzioni install in setup.php (non in hook.php) per problema OPcache
  2. Duplicate profilerights: Aggiunto check in Profile::registerRights() per evitare duplicati
  3. CSRF: Include inc/includes.php nei file front per gestione CSRF
  4. Firme metodi: Corretto getTabNameForItem(CommonGLPI, int) e displayTabContentForItem(CommonGLPI, int, int)
  5. AssetTab incompleto: Completato metodo formatTimestamp() mancante
  6. RIGHT_NAME costante inesistente: Sostituito Profile::RIGHT_NAME con stringa 'plugin_urbackup' in AssetTab, ServerAsset e MassiveAction. La costante non esiste nel plugin, era un errore di copia-incolla.
  7. Profile self-reference: Corretto displayTabContentForItem() per usare \Profile (core GLPI) invece di Profile (plugin)
  8. UrbackupApiClient riscritto completamente: Basato sul Python wrapper, con le seguenti correzioni chiave:
    • Session passata sia nell'URL che nel body POST
    • Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    • Autenticazione PBKDF2 compatibile con server UrBackup
    • Login flow: anonymous → salt → login con hash
    • Gestione errore {"error": 1} per username inesistente
  9. htmlescape() non esistente: Sostituito con htmlspecialchars() in tutti i file (AssetTab, Server, ServerAsset, MassiveAction, Config). La funzione htmlescape() non è definita in GLPI né in PHP.
  10. File front/asset.form.php mancante: Creato per gestire connect/disconnect/start_backup dal tab asset.
  11. File debug/junk rimossi: Eliminati debug_session.php, hook_corrected.php, rector.php, KILL_VED.php, front/debug.php.
  12. initProfile() obbligatorio: Reso $profile nullable ($profile = null) per compatibilità con GLPI che chiama initProfile() senza argomenti.

Modifica Test API Connection (v0.4.3)

Data: 2026-05-19

Descrizione: Modificato il comportamento del test API nel form del server:

  • Rimosso il pulsante "Test API Connection" manuale
  • Rimosse le righe "Last API status", "Last API message", "Last API check"
  • Aggiunto controllo automatico della connessione API eseguito ad ogni visualizzazione del form

Stati visualizzati:

  • 🟢 Verde "Connessione API OK" - Connessione riuscita
  • 🔴 Rosso "Connessione API fallita" - Errore di autenticazione o configurazione
  • 🟡 Giallo "Server irraggiungibile" - Problemi di rete (timeout, DNS, HTTP 4xx/5xx, SSL)

File modificati:

  • src/Server.php: Rimossa sezione pulsante e aggiunto metodo testApiConnection()
  • locales/it_IT.po, locales/en_GB.po, locales/de_DE.po: Aggiunte traduzioni

API UrBackup - Endpoints Verificati

Endpoint Metodo Note
/x?a=login POST Login anonimo o con sessione
/x?a=salt&username=X POST Richiede salt, ritorna ses + rnd
/x?a=login POST Con username, password hash, ses
/x?a=status POST Richiede ses nel body (non solo URL)

📝 Checklist Pre-Consegna

  • declare(strict_types=1); in ogni file PHP
  • Namespace Plugin\<Nome>\ e PSR-4 corretto
  • Check versione GLPI 11.0.6+ in setup.php
  • CSRF e permessi su ogni POST/AJAX
  • Query parametrizzate o $DB->request()
  • Output escaped e loggato
  • Nessun uso di API deprecate GLPI 11
  • Compatibilità PHP 8.3 verificata
  • Istruzioni installazione e test incluse (da completare)

🚧 Da Completare

  1. Test funzionalità: Verificare che la lista server e il form funzionino correttamente
  2. Asset Definition: Testare con Asset Definition di GLPI 11 se presenti
  3. AJAX: Endpoint per comunicazione API con server UrBackup
  4. Logging: Aggiungere trace per debugging
  5. composer.json: Creare file con PSR-4 e dipendenze

📌 Comandi Utili

# Installare il plugin
php bin/console glpi:plugin:install urbackup

# Attivare il plugin
php bin/console glpi:plugin:activate urbackup

# Disinstallare il plugin
echo "yes" | php bin/console glpi:plugin:uninstall urbackup

# Verificare syntax PHP
php -l plugins/urbackup/src/*.php
php -l plugins/urbackup/front/*.php

📚 Riferimenti


🔌 API UrBackup - Riferimenti Ufficiali

Documentazione UrBackup Web API

L'API di UrBackup Server è accessibile via HTTP alla porta 55414 (default). Gli endpoint sono accessibili tramite il path /x (es. http://localhost:55414/x).

Risorse API Utilizzate

  1. Python Wrapper (uroni/urbackup-server-python-web-api-wrapper)

    from urbackup_api import urbackup_server_typed
    server = urbackup_server_typed("http://127.0.0.1:55414/x", "admin", "password")
    server.login()
    
  2. Node.js Wrapper (bartmichu/node-urbackup-server-api)

    import { UrbackupServer } from 'urbackup-server-api';
    const server = new UrbackupServer({
      url: 'http://127.0.0.1:55414',
      username: 'admin',
      password: 'secretpassword',
    });
    

Endpoint API Principali

Metodo Descrizione
login Autenticazione con username/password
get_status Lista client con stato backup
get_backups Lista backup per client
start_backup Avvia backup (file/image)
get_progress Monitora progresso backup
get_clients Lista clienti
get_groups Lista gruppi

Implementazione Corrente

La classe UrbackupApiClient in src/UrbackupApiClient.php gestisce la connessione API. Il test di connessione deve:

  1. Tentare login con credenziali salvate
  2. Verificare risposta JSON valida
  3. Mostrare messaggio di successo/errore

Problemi Noti

  • JSON Parse Error: L'API restituisce HTML invece di JSON quando le credenziali sono errate
  • Timeout: Verificare che il server UrBackup sia raggiungibile
  • SSL: Se ignore_ssl è attivo, accettare certificati auto-signati

Debug - AJAX Endpoint 403 Error

Il test del pulsante "Test API" continua a restituire 403 Forbidden quando accesso via curl. Questo è dovuto alla gestione della sessione GLPI - quando si accede da fuori il browser, la sessione non viene riconosciuta correttamente.

Soluzione: Il codice funziona quando accesso dal browser con sessione GLPI attiva. L'endpoint front/server_test.ajax.php e il JS in public/js/urbackup.js sono configurati correttamente.

File chiave:

  • front/server_test.ajax.php - endpoint AJAX per test API
  • public/js/urbackup.js - JavaScript per gestire il click del pulsante

Test da effettuare:

  1. Accedere a GLPI con browser
  2. Navigare a: Server UrBackup > Modifica server
  3. Cliccare "Test API connection"
  4. Verificare che appaia "Testing..." e poi il risultato

Modifica Tab Linked/Unlinked Clients (v0.4.4)

Data: 2026-05-19

Descrizione: Modificato il comportamento delle tabelle nel form del server:

Linked Clients:

  • Query alla tabella glpi_plugin_urbackup_serverassets dove plugin_urbackup_servers_id = ID server
  • Per ogni asset collegato: mostrare client_name (dal DB)
  • Recuperare le altre info (status, last backup, IP) via API da UrBackup
  • I campi statici nel DB (client_version, last_file_backup, last_image_backup, last_sync) non vengono più usati per la visualizzazione

Unlinked Clients:

  • Chiamata API a UrBackup per ottenere tutti i client presenti sul server
  • Escludere tutti i client che sono già nella tabella glpi_plugin_urbackup_serverassets (collegati a qualsiasi server, non solo quello visualizzato)
  • Mostrare i client rimanenti con le info da API

Correzione bug:

  • Nome tabella corretto: glpi_plugin_urbackup_serverassets (non glpi_plugin_urbackup_server_assets)
  • Campo corretto: plugin_urbackup_servers_id (non servers_id)

File modificati:

  • src/Server.php: Modificati metodi showLinkedClientsTab() e showUnlinkedClientsTab()

Tabella semplificata glpi_plugin_urbackup_serverassets (v0.4.5)

Data: 2026-05-19

Descrizione: Semplificata la tabella per collegamento asset-server:

  • Rimossi campi non necessari: client_name, client_ip, client_version, is_active, last_file_backup, last_image_backup, last_sync, date_creation, date_mod, urbackup_client_id
  • La tabella ora contiene solo: id, plugin_urbackup_servers_id, itemtype, items_id
  • Il nome dell'asset viene recuperato dinamicamente da GLPI (sempre aggiornato)
  • Il confronto con UrBackup avviene via API

File modificati:

  • install/mysql/plugin_urbackup-empty.sql: Schema semplificato
  • install/install.php: Funzione aggiornata
  • src/ServerAsset.php: Metodi createForAsset(), getAssetName()
  • src/AssetTab.php: Recupero nome asset da GLPI
  • src/Server.php: Tabelle Linked/Unlinked aggiornate
  • src/MassiveAction.php: Rimossi messaggi confusing
  • front/asset.form.php: Corretto redirect e gestione disconnessione

Funzionalità API completate (v0.4.6)

Data: 2026-05-19

Descrizione: Completate le funzionalità API mancanti:

  • Salvataggio Modalità Internet su server UrBackup
  • Salvataggio Directory Predefinite su server UrBackup
  • Esecuzione backup file (incremental/full)
  • Esecuzione backup immagine (incremental/full)
  • Recupero versione client da API

File modificati:

  • src/AssetTab.php: Aggiunti metodi startBackup(), saveInternetMode(), saveDefaultDirs()
  • src/UrbackupApiClient.php: Aggiunti metodi updateClientSettings(), saveInternetMode()
  • front/asset.form.php: Gestione azioni per salvataggio impostazioni e backup