%PDF- %PDF-
| Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Migration/ |
| Current File : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Migration/AutoBackupRestore.php |
<?php
/*
* @copyright 2021 Passwords App
*
* @author Marius David Wieschollek
* @license AGPL-3.0
*
* This file is part of the Passwords App
* created by Marius David Wieschollek.
*/
namespace OCA\Passwords\Migration;
use OCA\Passwords\AppInfo\Application;
use OCA\Passwords\Db\FolderRevisionMapper;
use OCA\Passwords\Db\PasswordRevisionMapper;
use OCA\Passwords\Db\TagRevisionMapper;
use OCA\Passwords\Helper\User\AdminUserHelper;
use OCA\Passwords\Services\BackupService;
use OCA\Passwords\Services\NotificationService;
use OCP\IConfig;
use OCP\Migration\IOutput;
use OCP\Migration\IRepairStep;
/**
* Class AutoBackupRestore
*
* @package OCA\Passwords\Migration
*/
class AutoBackupRestore implements IRepairStep {
/**
* @var PasswordRevisionMapper
*/
protected PasswordRevisionMapper $passwordRevisionMapper;
/**
* @var FolderRevisionMapper
*/
protected FolderRevisionMapper $folderRevisionMapper;
/**
* @var TagRevisionMapper
*/
protected TagRevisionMapper $tagRevisionMapper;
/**
* @var BackupService
*/
protected BackupService $backupService;
/**
* @var NotificationService
*/
protected NotificationService $notifications;
/**
* @var IConfig
*/
protected IConfig $config;
/**
* @var AdminUserHelper
*/
protected AdminUserHelper $adminHelper;
/**
* AutoBackupRestore constructor.
*
* @param PasswordRevisionMapper $passwordRevisionMapper
* @param FolderRevisionMapper $folderRevisionMapper
* @param TagRevisionMapper $tagRevisionMapper
* @param NotificationService $notifications
* @param AdminUserHelper $adminHelper
* @param BackupService $backupService
* @param IConfig $config
*/
public function __construct(
PasswordRevisionMapper $passwordRevisionMapper,
FolderRevisionMapper $folderRevisionMapper,
TagRevisionMapper $tagRevisionMapper,
NotificationService $notifications,
AdminUserHelper $adminHelper,
BackupService $backupService,
IConfig $config
) {
$this->passwordRevisionMapper = $passwordRevisionMapper;
$this->folderRevisionMapper = $folderRevisionMapper;
$this->tagRevisionMapper = $tagRevisionMapper;
$this->backupService = $backupService;
$this->notifications = $notifications;
$this->adminHelper = $adminHelper;
$this->config = $config;
}
/**
* @return string
*/
public function getName() {
return 'Automatic Backup Restore';
}
/**
* @param IOutput $output
*
* @throws \OCP\Files\NotPermittedException
*/
public function run(IOutput $output) {
$enabled = $this->config->getAppValue(Application::APP_NAME, 'backup/update/autorestore', true);
if(!$enabled || !empty($this->passwordRevisionMapper->findAll()) || !empty($this->folderRevisionMapper->findAll()) || !empty($this->tagRevisionMapper->findAll())) {
$this->config->setAppValue(Application::APP_NAME, 'backup/update/restored', 0);
return;
}
$backups = $this->backupService->getBackups();
if(empty($backups)) {
$this->config->setAppValue(Application::APP_NAME, 'backup/update/restored', 1);
return;
}
$backups = array_reverse($backups, true);
foreach($backups as $name => $backup) {
$info = $this->backupService->getBackupInfo($backup, true);
if(!isset($info['entities'])) {
continue;
}
if($info['entities']['passwords'] > 0 || $info['entities']['folders'] > 0 || $info['entities']['tags'] > 0) {
try {
$this->backupService->createBackup('AUTO_'.date('y-m-d_H-i'), BackupService::AUTO_BACKUPS);
$options = [
'user' => null,
'data' => true,
'settings' => ['user' => true, 'client' => true, 'application' => true]
];
$this->backupService->restoreBackup($name, $options);
$this->sendNotification('sendBackupRestoredNotification', $name);
$this->config->setAppValue(Application::APP_NAME, 'backup/update/restored', 2);
break;
} catch(\Throwable $e) {
$this->sendNotification('sendBackupRestoredNotification', $name);
$this->config->setAppValue(Application::APP_NAME, 'backup/update/restored', 3);
}
}
}
}
/**
* @param string $name
* @param string $backup
*/
protected function sendNotification(string $name, string $backup): void {
foreach($this->adminHelper->getAdmins() as $admin) {
$this->notifications->{$name}($admin->getUID(), $backup);
}
}
}