adding console command to migrate encryption keys - refs #13450

This commit is contained in:
Thomas Müller 2015-01-22 16:10:45 +01:00
parent b5b491d1bb
commit fc1865449d
3 changed files with 114 additions and 21 deletions

View File

@ -0,0 +1,12 @@
<?php
/**
* Copyright (c) 2015 Thomas Müller <deepdiver@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
use OCA\Files_Encryption\Command\MigrateKeys;
$userManager = OC::$server->getUserManager();
$application->add(new MigrateKeys($userManager));

View File

@ -0,0 +1,74 @@
<?php
/**
* Copyright (c) 2015 Thomas Müller <thomas.mueller@tmit.eu>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
namespace OCA\Files_Encryption\Command;
use OCA\Files_Encryption\Migration;
use OCP\IUserBackend;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class MigrateKeys extends Command {
/** @var \OC\User\Manager */
private $userManager;
public function __construct(\OC\User\Manager $userManager) {
$this->userManager = $userManager;
parent::__construct();
}
protected function configure() {
$this
->setName('encryption:migrate-keys')
->setDescription('migrate encryption keys')
->addArgument(
'user_id',
InputArgument::OPTIONAL | InputArgument::IS_ARRAY,
'will migrate keys of the given user(s)'
);
}
protected function execute(InputInterface $input, OutputInterface $output) {
// perform system reorganization
$migration = new Migration();
$output->writeln("Reorganize system folder structure");
$migration->reorganizeSystemFolderStructure();
$users = $input->getArgument('user_id');
if (!empty($users)) {
foreach ($users as $user) {
if ($this->userManager->userExists($user)) {
$output->writeln("Migrating keys <info>$user</info>");
$migration->reorganizeFolderStructureForUser($user);
} else {
$output->writeln("<error>Unknown user $user</error>");
}
}
} else {
foreach($this->userManager->getBackends() as $backend) {
$name = get_class($backend);
if ($backend instanceof IUserBackend) {
$name = $backend->getBackendName();
}
$output->writeln("Migrating keys for users on backend <info>$name</info>");
$users = $backend->getUsers();
foreach ($users as $user) {
$output->writeln(" <info>$user</info>");
$migration->reorganizeFolderStructureForUser($user);
}
}
}
}
}

View File

@ -40,6 +40,15 @@ class Migration {
}
public function reorganizeFolderStructure() {
$this->reorganizeSystemFolderStructure();
$users = \OCP\User::getUsers();
foreach ($users as $user) {
$this->reorganizeFolderStructureForUser($user);
}
}
public function reorganizeSystemFolderStructure() {
$this->createPathForKeys('/files_encryption');
@ -60,9 +69,10 @@ class Migration {
$this->view->deleteAll('/owncloud_private_key');
$this->view->deleteAll('/files_encryption/share-keys');
$this->view->deleteAll('/files_encryption/keyfiles');
}
$users = \OCP\User::getUsers();
foreach ($users as $user) {
public function reorganizeFolderStructureForUser($user) {
// backup all keys
if ($this->backupUserKeys($user)) {
// create new 'key' folder
@ -82,7 +92,6 @@ class Migration {
$this->deleteOldKeys($user);
}
}
}
private function backupSystemWideKeys() {
$backupDir = 'encryption_migration_backup_' . date("Y-m-d_H-i-s");
@ -277,6 +286,4 @@ class Migration {
}
}
}
}