Skip to content

Commit

Permalink
migrate storages to the db
Browse files Browse the repository at this point in the history
  • Loading branch information
icewind1991 committed Nov 23, 2015
1 parent df53bc7 commit 5fe7207
Show file tree
Hide file tree
Showing 7 changed files with 451 additions and 4 deletions.
2 changes: 1 addition & 1 deletion apps/files_external/appinfo/info.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<admin>admin-external-storage</admin>
</documentation>
<rememberlogin>false</rememberlogin>
<version>0.4.2</version>
<version>0.5.0</version>
<types>
<filesystem/>
</types>
Expand Down
30 changes: 30 additions & 0 deletions apps/files_external/appinfo/update.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php
/**
* @author Robin Appelman <[email protected]>
*
* @copyright Copyright (c) 2015, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/

$installedVersion = \OC::$server->getConfig()->getAppValue('files_external', 'installed_version');

$app = new \OCA\Files_external\Appinfo\Application();

// Migration to db config
if (version_compare($installedVersion, '0.5.0', '<')) {
$migrator = $app->getContainer()->query('OCA\Files_external\Migration\StorageMigrator');
$migrator->migrateGlobal();
}
14 changes: 11 additions & 3 deletions apps/files_external/lib/config/configadapter.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@

namespace OCA\Files_External\Config;

use OCA\Files_external\Migration\StorageMigrator;
use OCP\Files\Storage;
use OC\Files\Mount\MountPoint;
use OCP\Files\Storage\IStorageFactory;
Expand All @@ -45,17 +46,22 @@ class ConfigAdapter implements IMountProvider {

/** @var UserGlobalStoragesService */
private $userGlobalStoragesService;
/** @var StorageMigrator */
private $migrator;

/**
* @param UserStoragesService $userStoragesService
* @param UserGlobalStoragesService $userGlobalStoragesService
* @param StorageMigrator $migrator
*/
public function __construct(
UserStoragesService $userStoragesService,
UserGlobalStoragesService $userGlobalStoragesService
UserGlobalStoragesService $userGlobalStoragesService,
StorageMigrator $migrator
) {
$this->userStoragesService = $userStoragesService;
$this->userGlobalStoragesService = $userGlobalStoragesService;
$this->migrator = $migrator;
}

/**
Expand Down Expand Up @@ -109,6 +115,8 @@ private function constructStorage(StorageConfig $storageConfig) {
* @return \OCP\Files\Mount\IMountPoint[]
*/
public function getMountsForUser(IUser $user, IStorageFactory $loader) {
$this->migrator->migrateUser();

$mounts = [];

$this->userStoragesService->setUser($user);
Expand All @@ -125,7 +133,7 @@ public function getMountsForUser(IUser $user, IStorageFactory $loader) {

$mount = new MountPoint(
$impl,
'/'.$user->getUID().'/files' . $storage->getMountPoint(),
'/' . $user->getUID() . '/files' . $storage->getMountPoint(),
null,
$loader,
$storage->getMountOptions()
Expand All @@ -146,7 +154,7 @@ public function getMountsForUser(IUser $user, IStorageFactory $loader) {
$this->userStoragesService,
$storage->getId(),
$impl,
'/'.$user->getUID().'/files' . $storage->getMountPoint(),
'/' . $user->getUID() . '/files' . $storage->getMountPoint(),
null,
$loader,
$storage->getMountOptions()
Expand Down
108 changes: 108 additions & 0 deletions apps/files_external/migration/storagemigrator.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
<?php
/**
* @author Robin Appelman <[email protected]>
*
* @copyright Copyright (c) 2015, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/

namespace OCA\Files_external\Migration;

use OCA\Files_External\Service\BackendService;
use OCA\Files_External\Service\DBConfigService;
use OCA\Files_external\Service\GlobalLegacyStoragesService;
use OCA\Files_external\Service\GlobalStoragesService;
use OCA\Files_external\Service\LegacyStoragesService;
use OCA\Files_external\Service\StoragesService;
use OCA\Files_external\Service\UserLegacyStoragesService;
use OCA\Files_external\Service\UserStoragesService;
use OCP\IConfig;
use OCP\IUserSession;

class StorageMigrator {
/**
* @var BackendService
*/
private $backendService;

/**
* @var DBConfigService
*/
private $dbConfig;

/**
* @var IUserSession
*/
private $userSession;

/**
* @var IConfig
*/
private $config;

/**
* StorageMigrator constructor.
*
* @param BackendService $backendService
* @param DBConfigService $dbConfig
* @param IUserSession $userSession
* @param IConfig $config
*/
public function __construct(
BackendService $backendService,
DBConfigService $dbConfig,
IUserSession $userSession,
IConfig $config
) {
$this->backendService = $backendService;
$this->dbConfig = $dbConfig;
$this->userSession = $userSession;
$this->config = $config;
}

private function migrate(LegacyStoragesService $legacyService, StoragesService $storageService) {
$existingStorage = $legacyService->getAllStorages();

foreach ($existingStorage as $storage) {
$storageService->addStorage($storage);
}
}

/**
* Migrate admin configured storages
*/
public function migrateGlobal() {
$legacyService = new GlobalLegacyStoragesService($this->backendService);
$storageService = new GlobalStoragesService($this->backendService, $this->dbConfig);

$this->migrate($legacyService, $storageService);
}

/**
* Migrate personal storages configured by the current user
*/
public function migrateUser() {
$userId = $this->userSession->getUser()->getUID();
$userVersion = $this->config->getUserValue($userId, 'files_external', 'config_version', '0.0.0');
if (version_compare($userVersion, '0.5.0', '<')) {
$this->config->setUserValue($userId, 'files_external', 'config_version', '0.5.0');
$legacyService = new UserLegacyStoragesService($this->backendService, $this->userSession);
$storageService = new UserStoragesService($this->backendService, $this->dbConfig, $this->userSession);

$this->migrate($legacyService, $storageService);
}
}
}
41 changes: 41 additions & 0 deletions apps/files_external/service/globallegacystoragesservice.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php
/**
* @author Robin Appelman <[email protected]>
*
* @copyright Copyright (c) 2015, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/

namespace OCA\Files_external\Service;

class GlobalLegacyStoragesService extends LegacyStoragesService {
/**
* @param BackendService $backendService
*/
public function __construct(BackendService $backendService) {
$this->backendService = $backendService;
}

/**
* Read legacy config data
*
* @return array list of mount configs
*/
protected function readLegacyConfig() {
// read global config
return \OC_Mount_Config::readData();
}
}
Loading

0 comments on commit 5fe7207

Please sign in to comment.