'Missing required parameters: username or domainname']); return; } $backupDir = "/home/$username/backups"; error_log(" Starting function listbackups for " . $username . " and " . $domain . " : BackupDir " . $backupDir); if (!is_dir($backupDir)) { error_log(" ERROR: Backup Dir does not exist"); http_response_code(404); echo json_encode(['error' => 'Backup directory not found']); return; } $files = array_diff(scandir($backupDir), ['.', '..']); $backupList = []; foreach ($files as $file) { if (preg_match('/^(\d{4}-\d{2}-\d{2})-' . preg_quote($domain, '/') . '\.tar\.gz$/', $file, $matches)) { $originalDate = $matches[1]; $swissDate = DateTime::createFromFormat('Y-m-d', $originalDate)->format('d.m.Y'); $sizeMB = round(filesize("$backupDir/$file") / (1024 * 1024), 2); $backupList[] = [ 'backup_date' => $originalDate, 'swiss_date' => $swissDate, 'size_mb' => $sizeMB, 'filename' => $file ]; } } echo json_encode(['backups' => $backupList]); } // BackupFile: YYYY-MM-DD-prod_domain.tar.gz // DBBackupFile: YYYY-MM-DD-prod_domain.sql public static function restoreBackup($data):void { $username = $data['username'] ?? ''; $domain = $data['domain'] ?? ''; if (empty($username) || empty($data['backup_date']) || empty($domain)) { error_log("restoreBackup: ERROR: No username, domain provided or backup_date provided"); http_response_code(400); echo json_encode(['error' => 'Missing required parameters']); return; } error_log(" Starting function restoreBackup for " . $username . " and " . $domain . " : Backup-Date " . $data['backup_date']); $backupDir = "/home/$username/backups"; $webrootDir = "/home/$username/prod.$domain"; $backupFile = $data['backup_date'] ?? ''; $backupFile = $backupFile . "-" . $domain . ".tar.gz"; $dbBackupFile = $backupDir ." /" . $data['backup_date'] . "-prod_" . str_replace(['-', '.'], ["_", "_"], $domain); $prodDatabaseName = $username . "_prod_"; $prodDatabaseName = $prodDatabaseName . str_replace(['-', '.'], ["_", "_"], $domain); if (!file_exists($backupFile)) { error_log("restoreBackup: ERROR: Backup file $backupFile does not exist"); http_response_code(404); echo json_encode(['error' => 'Web Backup file not found']); return; } if (!file_exists($dbBackupFile)) { error_log("restoreBackup: ERROR: Database backup file $dbBackupFile does not exist"); http_response_code(404); echo json_encode(['error' => 'Database Backup file not found']); return; } exec("sudo /usr/bin/tar -xzf $backupFile -C $webrootDir", $output, $returnCode); if ($returnCode !== 0) { error_log("restoreBackup: ERROR: Failed to restore webroot, details' =>" . implode("\n", $output)); http_response_code(500); echo json_encode(['error' => 'Failed to restore webroot', 'details' => implode("\n", $output)]); return; } exec("sudo /usr/bin/mysql $prodDatabaseName < $dbBackupFile", $output, $returnCode); if ($returnCode !== 0) { error_log("restoreBackup: ERROR: Failed to restore database, details' =>" . implode("\n", $output)); http_response_code(500); echo json_encode(['error' => 'Failed to restore database', 'details' => implode("\n", $output)]); return; } echo json_encode(['success' => 'Backup restored successfully']); } }