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, prerequisitihook.php: Funzioni di installazione (spostate in setup.php per OPcache)src/: Classi namespaced con namespaceGlpiPlugin\Urbackupinstall/: Script di installazione e disinstallazione databasefront/: Pagine PHP per lista server e formajax/: 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 pluginfront/server.php: Lista server UrBackupfront/server.form.php: Form aggiunta/modifica serverfront/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
- OPcache: Funzioni install in setup.php (non in hook.php) per problema OPcache
- Duplicate profilerights: Aggiunto check in
Profile::registerRights()per evitare duplicati - CSRF: Include
inc/includes.phpnei file front per gestione CSRF - Firme metodi: Corretto
getTabNameForItem(CommonGLPI, int)edisplayTabContentForItem(CommonGLPI, int, int) - AssetTab incompleto: Completato metodo
formatTimestamp()mancante - RIGHT_NAME costante inesistente: Sostituito
Profile::RIGHT_NAMEcon stringa'plugin_urbackup'in AssetTab, ServerAsset e MassiveAction. La costante non esiste nel plugin, era un errore di copia-incolla. - Profile self-reference: Corretto
displayTabContentForItem()per usare\Profile(core GLPI) invece diProfile(plugin) - 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
htmlescape()non esistente: Sostituito conhtmlspecialchars()in tutti i file (AssetTab, Server, ServerAsset, MassiveAction, Config). La funzionehtmlescape()non è definita in GLPI né in PHP.- File
front/asset.form.phpmancante: Creato per gestire connect/disconnect/start_backup dal tab asset. - File debug/junk rimossi: Eliminati debug_session.php, hook_corrected.php, rector.php, KILL_VED.php, front/debug.php.
initProfile()obbligatorio: Reso$profilenullable ($profile = null) per compatibilità con GLPI che chiamainitProfile()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 metodotestApiConnection()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
- Test funzionalità: Verificare che la lista server e il form funzionino correttamente
- Asset Definition: Testare con Asset Definition di GLPI 11 se presenti
- AJAX: Endpoint per comunicazione API con server UrBackup
- Logging: Aggiungere trace per debugging
- 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
- GLPI 11 Plugin Development: https://glpi-project.org/documentation/
- Plugin Example: https://github.com/pluginsGLPI/example
- GLPI Inventory: https://github.com/glpi-project/glpi-inventory-plugin
🔌 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
-
Python Wrapper (uroni/urbackup-server-python-web-api-wrapper)
- URL: https://github.com/uroni/urbackup-server-python-web-api-wrapper
- Esempio di connessione:
from urbackup_api import urbackup_server_typed server = urbackup_server_typed("http://127.0.0.1:55414/x", "admin", "password") server.login() -
Node.js Wrapper (bartmichu/node-urbackup-server-api)
- URL: https://github.com/bartmichu/node-urbackup-server-api
- Esempio di connessione:
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:
- Tentare login con credenziali salvate
- Verificare risposta JSON valida
- 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 APIpublic/js/urbackup.js- JavaScript per gestire il click del pulsante
Test da effettuare:
- Accedere a GLPI con browser
- Navigare a: Server UrBackup > Modifica server
- Cliccare "Test API connection"
- 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_serverassetsdoveplugin_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(nonglpi_plugin_urbackup_server_assets) - Campo corretto:
plugin_urbackup_servers_id(nonservers_id)
File modificati:
src/Server.php: Modificati metodishowLinkedClientsTab()eshowUnlinkedClientsTab()
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 semplificatoinstall/install.php: Funzione aggiornatasrc/ServerAsset.php: MetodicreateForAsset(),getAssetName()src/AssetTab.php: Recupero nome asset da GLPIsrc/Server.php: Tabelle Linked/Unlinked aggiornatesrc/MassiveAction.php: Rimossi messaggi confusingfront/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 metodistartBackup(),saveInternetMode(),saveDefaultDirs()src/UrbackupApiClient.php: Aggiunti metodiupdateClientSettings(),saveInternetMode()front/asset.form.php: Gestione azioni per salvataggio impostazioni e backup