summaryrefslogtreecommitdiffstats
path: root/modules-available/backup/page.inc.php
diff options
context:
space:
mode:
authorSimon Rettberg2023-03-02 13:47:49 +0100
committerSimon Rettberg2023-03-02 13:47:49 +0100
commit9db03926a80a910aa9ef338a5ad1d2328e6e6cb7 (patch)
treeedafb8eb40a8703454052b707e2424a907709906 /modules-available/backup/page.inc.php
parent[inc/Taskmanager] Update phpdoc (diff)
downloadslx-admin-9db03926a80a910aa9ef338a5ad1d2328e6e6cb7.tar.gz
slx-admin-9db03926a80a910aa9ef338a5ad1d2328e6e6cb7.tar.xz
slx-admin-9db03926a80a910aa9ef338a5ad1d2328e6e6cb7.zip
[backup] Add UI for monthly automatic backup + password support
Diffstat (limited to 'modules-available/backup/page.inc.php')
-rw-r--r--modules-available/backup/page.inc.php57
1 files changed, 47 insertions, 10 deletions
diff --git a/modules-available/backup/page.inc.php b/modules-available/backup/page.inc.php
index c6aa09ae..04cb82b4 100644
--- a/modules-available/backup/page.inc.php
+++ b/modules-available/backup/page.inc.php
@@ -3,9 +3,8 @@
class Page_Backup extends Page
{
- const LAST_BACKUP_PROP = 'backup.last-time';
-
- private $action = false;
+ /** @var ?string */
+ private $action = null;
private $templateData = array();
protected function doPreprocess()
@@ -22,6 +21,9 @@ class Page_Backup extends Page
} elseif ($this->action === 'restore') {
User::assertPermission("restore");
$this->restore();
+ } elseif ($this->action === 'config') {
+ User::assertPermission("config");
+ $this->config();
}
User::assertPermission('*');
}
@@ -31,27 +33,40 @@ class Page_Backup extends Page
if ($this->action === 'restore') { // TODO: We're in post mode, redirect with all the taskids first...
Render::addTemplate('restore', $this->templateData);
} else {
- $lastBackup = (int)Property::get(self::LAST_BACKUP_PROP, 0);
+ $lastBackup = (int)Property::get(BackupRestore::PROP_LAST_BACKUP, 0);
if ($lastBackup === 0) {
$lastBackup = false;
} else {
$lastBackup = date('d.m.Y', $lastBackup);
}
- $params = ['last_backup' => $lastBackup];
- Permission::addGlobalTags($params['perms'], NULL, ['create', 'restore']);
+ $params = [
+ 'last_backup' => $lastBackup,
+ 'autoBackupEnabled_checked' => Property::get(BackupRestore::PROP_AUTO_BACKUP_MODE, BackupRestore::BACKUP_MODE_OFF)
+ != BackupRestore::BACKUP_MODE_OFF ? 'checked' : '',
+ 'autoBackupPw' => Property::get(BackupRestore::PROP_AUTO_BACKUP_PASS, ''),
+ ];
+ Permission::addGlobalTags($params['perms'], NULL, ['create', 'restore', 'config']);
Render::addTemplate('_page', $params);
}
}
private function backup()
{
- $task = Taskmanager::submit('BackupRestore', array('mode' => 'backup'));
+ $password = trim(Request::post('passwd', '', 'string'));
+ if (empty($password)) {
+ $password = null;
+ }
+ $task = Taskmanager::submit('BackupRestore', [
+ 'mode' => 'backup',
+ 'password' => $password,
+ ]);
if (!isset($task['id'])) {
Message::addError('backup-failed');
Util::redirect('?do=Backup');
}
- $task = Taskmanager::waitComplete($task, 30000);
+ $task = Taskmanager::waitComplete($task, 60000);
if (!Taskmanager::isFinished($task) || !isset($task['data']['backupFile'])) {
+ file_put_contents('/tmp/bwlp-backup-error-' . time() . '.txt', json_encode($task['data']));
Taskmanager::addErrorMessage($task);
Util::redirect('?do=Backup');
}
@@ -62,8 +77,12 @@ class Page_Backup extends Page
Message::addError('main.error-read', $task['data']['backupFile']);
Util::redirect('?do=Backup');
}
+ $userFn = 'satellite-backup_' . Property::getServerIp() . '_' . date('Y.m.d-H.i.s') . '.tgz';
+ if ($password !== null) {
+ $userFn .= '.aes';
+ }
Header('Content-Type: application/octet-stream', true);
- Header('Content-Disposition: attachment; filename=' . 'satellite-backup_' . Property::getServerIp() . '_' . date('Y.m.d-H.i.s') . '.tgz');
+ Header('Content-Disposition: attachment; filename=' . $userFn);
Header('Content-Length: ' . @filesize($task['data']['backupFile']));
while (!feof($fh)) {
$data = fread($fh, 16000);
@@ -77,7 +96,7 @@ class Page_Backup extends Page
}
@fclose($fh);
@unlink($task['data']['backupFile']);
- Property::set(self::LAST_BACKUP_PROP, time());
+ Property::set(BackupRestore::PROP_LAST_BACKUP, time());
die();
}
@@ -110,9 +129,14 @@ class Page_Backup extends Page
$parent = $task['id'];
}
EventLog::info('Creating backup on ' . Property::getServerIp());
+ $password = trim(Request::post('passwd', '', 'string'));
+ if (empty($password)) {
+ $password = null;
+ }
// Finally run restore
$task = Taskmanager::submit('BackupRestore', array(
'mode' => 'restore',
+ 'password' => $password,
'backupFile' => $tempfile,
'parentTask' => $parent,
'failOnParentFail' => false,
@@ -143,4 +167,17 @@ class Page_Backup extends Page
$this->templateData['rebootid'] = $task['id'];
}
+ private function config()
+ {
+ $password = trim(Request::post('passwd', '', 'string'));
+ if (empty($password)) {
+ $password = null;
+ }
+ $mode = Request::post('auto-backup-enabled', 0, 'int')
+ ? BackupRestore::BACKUP_MODE_VMSTORE : BackupRestore::BACKUP_MODE_OFF;
+ Property::set(BackupRestore::PROP_AUTO_BACKUP_MODE, $mode);
+ Property::set(BackupRestore::PROP_AUTO_BACKUP_PASS, $password);
+ Util::redirect('?do=backup');
+ }
+
}