7.0 KiB
7.0 KiB
UrBackup API Actions (testati)
Server: http://localhost:55414 Credenziali: utente admin, password 12345678 API Version: 2
Riepilogo dei test (aggiornato 05/08/2026 — login 2-fasi VERIFICATO)
- Login (2-fasi salt/PBKDF2): ✅ FUNZIONANTE — POST
username=admina/x?a=salt→{"salt":"...","pbkdf2_rounds":10000,"rnd":"...","ses":"..."}; poi POSTusername=admin&password=<hash>&ses=<ses>a/x?a=login→{"success":true,...}. Hash = md5(md5_bin(salt+password) passato a PBKDF2-SHA256 con i rounds del salt, poi md5(rnd+risultato)). Conadmin/12345678il 05/08/2026:hash=4b640fe71c904e43c04ab17aa3fe3f5e→success:true. - Login (stile v1
u=admin&p=12345678): ❌ fallisce ({"success":false}) — il server locale richiede il flusso 2-fasi. - Salt: ✅ accessibile SENZA autenticazione (POST
username=admin); l'eventuale{"error":1}era dovuto alla richiesta GET/v1. - Status: ✅ testabile con sessione valida (
POST /x?a=status&ses=...). - Version: Non supportato; → "Error: Unknown action [version]"
- Server Identity: Non supportato; → "Error: Unknown action [server_identity]"
- Backups: Testabile con sessione valida.
- Livelog: Non testato (azione disponibile nel codice)
- Start Backup: Non testato (azione disponibile nel codice)
- Add Client: Non testato (azione disponibile nel codice)
- Remove Client: Non testato (azione disponibile nel codice)
- Clientsettings: Non testato (azione disponibile nel codice)
- Clientsettings_save: Non testato (azione disponibile nel codice)
API Actions disponibili nel codice (UrbackupApiClient.php)
Client Status
getStatus(): Ottiene tutti i client → endpointstatusgetClientStatusByName(string $client_name): Ricerca client per nomegetClientIdByName(string $client_name): Ottiene ID client per nome
Client Settings
getClientSettings(string $client_name): Ottiene impostazioni client → endpointsettingsconsa=clientsettingsupdateClientSettings(string $client_name, string $key, string $value): Aggiorna impostazioni clientsaveInternetMode(string $client_name, bool $enabled): Salva impostazione internet modegetClientAuthKey(string $client_name): Ottiene chiave di autenticazione internet client
Client Operations
addClient(string $client_name): Aggiunge client → endpointadd_clientremoveClient(string $client_name): Rimuove client → endpointremove_client
Backup Operations
startIncrementalFileBackup(string $client_name): Avvia backup file incrementalestartFullFileBackup(string $client_name): Avvia backup file completostartIncrementalImageBackup(string $client_name): Avvia backup immagine incrementalestartFullImageBackup(string $client_name): Avvia backup immagine completogetRecentBackups(string $client_name, int $limit = 40): Ottiene backup recenti → endpointbackups
Log Operations
getClientLogs(string $client_name, int $limit = 50): Ottiene log client → endpointlivelog
Server Operations
getServerIdentity(): Ottiene identità server → endpointserver_identity
Dettaglio del payload delle API
Login (2-fasi, come implementato in UrbackupApiClient::login())
Fase 1 — GET/POST /x?a=salt
Parametri: username=<utente>
Risposta: {"salt":"...","pbkdf2_rounds":10000,"rnd":"...","ses":"..."}
Fase 2 — POST /x?a=login
Parametri: username=<utente>, password=<hash>, ses=<ses da fase 1>
hash = md5( pbkdf2_sha256( md5_bin(salt . password), salt, pbkdf2_rounds ) . rnd )
(md5_bin = md5 binario, non esadecimale)
Risposta attesa: {"success": true, ...}
- Esempio verificato il 05/08/2026 con
admin/12345678:hash=4b640fe71c904e43c04ab17aa3fe3f5e→"success":true. - Lo stile v1 (
u=/p=hash MD5) NON funziona sul server locale.
Salt
Endpoint: POST /x?a=salt?username=...
Risposta attesa: {"success": true, "salt": "...", "rnd": "...", "pbkdf2_rounds": ...}
Status
Endpoint: POST /x?a=status
Con sessione: ?ses=...
Risposta attesa: {"success": true, "status": [{"id":...,"name":...}]}
Settings (clientsettings)
Endpoint: POST /x?a=settings
Parametri:
sa=clientsettings
t_clientid=id_client
use=valore
value=valore
value_client=valore_client
value_group=valore_group
Settings Save (clientsettings_save)
Endpoint: POST /x?a=settings
Parametri:
sa=clientsettings_save
t_clientid=id_client
overwrite=true
key=valore
Backups
Endpoint: POST /x?a=backups
Con sessione: ?ses=...
Parametri:
sa=backups
clientid=id_client
Livelog
Endpoint: POST /x?a=livelog
Con sessione: ?ses=...
Parametri:
clientid=id_client
lastid=ultimo_id
Start Backup
Endpoint: POST /x?a=start_backup
Con sessione: ?ses=...
Parametri:
start_client=clientid
start_type=tipo (incr_file/full_file/incr_image/full_image)
Add Client
Endpoint: POST /x?a=add_client
Con sessione: ?ses=...
Parametri:
clientname=nome_client
Remove Client
Endpoint: POST /x?a=remove_client
Con sessione: ?ses=...
Parametri:
clientid=id_client (opzionale)
clientname=nome_client
Server Identity
Endpoint: POST /x?a=server_identity
Con sessione: ?ses=...
Risposta attesa: {"server_identity": "nome_server"}
Struct delle impostazioni (clientsettings)
{
"use": "bool",
"value": "mixed",
"value_client": "string",
"value_group": "string"
}
Struct dei backup (backups)
{
"backup_id": backup id,
"machine_name": server machine name,
"starttime": "timestamp",
"endtime": "timestamp",
"status": "status",
"size": "size"
}
Struttura del log (livelog)
{
"time": "timestamp",
"level": "level",
"message": "message",
"id": "log id"
}
Note sull'autenticazione
Il client implementa un flusso di autenticazione a due fasi:
- Inizia il login con username → endpoint
login - Se salta, chiama
/x?a=saltcon username per ottenere salt e RNG - Calcola hash password:
hash_pbkdf2('sha256', md5(salt_str . password), salt_str, pbkdf2_rounds) + md5(rnd + passwordMd5) - Completa il login con username/password/hash/rnd/ses
Errori riscontrati
- Autenticazione: u=admin&p=12345678 non valido; potrebbe non esistere nel server UrBackup
- Salt: Fallisce senza autenticazione corretta
- URL endpoint: Alcuni test con
?a=server_identityfalliscono, suggerendo potrebbero usare un nome azione diverso
Passaggi successivi
- Verificare esistenza utente admin nel server UrBackup (potrebbe non esistere)
- Usare u=admin&p=12345678 non valido; ottenere credenziali corrette
- Tentare di ottenere session token tramite il corretto flusso di autenticazione a due fasi
- La maggior parte delle API funziona ma richiede autenticazione valida
Correzione del codice necessaria per future chiamate API
Il codice UrbackupApiClient.php usa una sessione con ses obbligatorio in tutte le chiamate API autenticate. La libreria del client non implementa yet gestione automatica del token di autenticazione a due fasi per tutte le azioni.