| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- <?php
- namespace application\controllers;
- class BackupController {
- // BackupFile: YYYY-MM-DD-prod_domain.tar.gz
- // DBBackupFile: YYYY-MM-DD-prod_domain.sql
- public static function listBackups($data):void {
- $username = $data['username'] ?? '';
- $domain = $data['domain'] ?? '';
- if (empty($username) || empty($domain)) {
- error_log("listBackups: ERROR: No username or domain provided");
- http_response_code(400);
- echo json_encode(['error' => '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']);
- }
- }
|