Skip to content

Commit

Permalink
Merge pull request #20370 from owncloud/external-db-config
Browse files Browse the repository at this point in the history
 Move files_external mount config to the database
  • Loading branch information
Vincent Petry committed Dec 4, 2015
2 parents 98bb837 + a1898dc commit e91eba4
Show file tree
Hide file tree
Showing 18 changed files with 1,614 additions and 951 deletions.
222 changes: 222 additions & 0 deletions apps/files_external/appinfo/database.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,222 @@
<database>
<name>*dbname*</name>
<create>true</create>
<overwrite>false</overwrite>
<charset>utf8</charset>
<table>
<name>*dbprefix*external_mounts</name>
<declaration>
<field>
<name>mount_id</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
<autoincrement>1</autoincrement>
<length>6</length>
</field>
<field>
<name>mount_point</name>
<type>text</type>
<length>128</length>
<notnull>true</notnull>
</field>
<field>
<name>storage_backend</name>
<type>text</type>
<length>64</length>
<notnull>true</notnull>
</field>
<field>
<name>auth_backend</name>
<type>text</type>
<length>64</length>
<notnull>true</notnull>
</field>
<field>
<name>priority</name>
<type>integer</type>
<default>100</default>
<length>4</length>
<notnull>true</notnull>
</field>
<!-- admin = 1, personal = 2-->
<field>
<name>type</name>
<type>integer</type>
<length>4</length>
<notnull>true</notnull>
</field>
</declaration>
</table>
<table>
<name>*dbprefix*external_applicable</name>
<declaration>
<field>
<name>applicable_id</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
<autoincrement>1</autoincrement>
<length>6</length>
</field>
<field>
<!--foreign key: external_mounts.mount_id-->
<name>mount_id</name>
<type>integer</type>
<notnull>true</notnull>
<length>6</length>
</field>
<field>
<!-- possible mount types: global = 1, group = 2, user = 3 -->
<name>type</name>
<type>integer</type>
<length>4</length>
<notnull>true</notnull>
</field>
<field>
<!-- user_id, group_id or null for global mounts -->
<name>value</name>
<type>text</type>
<length>64</length>
</field>
<index>
<name>mount_id_app_index</name>
<field>
<name>mount_id</name>
<sorting>ascending</sorting>
</field>
</index>
<index>
<name>applicable_value_index</name>
<field>
<name>type</name>
<sorting>ascending</sorting>
</field>
<field>
<name>value</name>
<sorting>ascending</sorting>
</field>
</index>
<index>
<name>applicable_value_mount_index</name>
<unique>true</unique>
<field>
<name>type</name>
<sorting>ascending</sorting>
</field>
<field>
<name>value</name>
<sorting>ascending</sorting>
</field>
<field>
<name>mount_id</name>
<sorting>ascending</sorting>
</field>
</index>
</declaration>
</table>
<table>
<name>*dbprefix*external_config</name>
<declaration>
<field>
<name>config_id</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
<autoincrement>1</autoincrement>
<length>6</length>
</field>
<field>
<!--foreign key: external_mounts.mount_id-->
<name>mount_id</name>
<type>integer</type>
<notnull>true</notnull>
<length>6</length>
</field>
<field>
<name>key</name>
<type>text</type>
<notnull>true</notnull>
<length>64</length>
</field>
<field>
<name>value</name>
<type>text</type>
<notnull>true</notnull>
<length>4096</length>
</field>

<index>
<name>config_mount_id</name>
<field>
<name>mount_id</name>
<sorting>ascending</sorting>
</field>
</index>
<index>
<name>config_mount_key</name>
<unique>true</unique>
<field>
<name>mount_id</name>
<sorting>ascending</sorting>
</field>
<field>
<name>key</name>
<sorting>ascending</sorting>
</field>
</index>
</declaration>
</table>
<table>
<name>*dbprefix*external_options</name>
<declaration>
<field>
<name>option_id</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
<autoincrement>1</autoincrement>
<length>6</length>
</field>
<field>
<!--foreign key: external_mounts.mount_id-->
<name>mount_id</name>
<type>integer</type>
<notnull>true</notnull>
<length>6</length>
</field>
<field>
<name>key</name>
<type>text</type>
<notnull>true</notnull>
<length>64</length>
</field>
<field>
<name>value</name>
<type>text</type>
<notnull>true</notnull>
<length>256</length>
</field>

<index>
<name>option_mount_id</name>
<field>
<name>mount_id</name>
<sorting>ascending</sorting>
</field>
</index>
<index>
<name>option_mount_key</name>
<unique>true</unique>
<field>
<name>mount_id</name>
<sorting>ascending</sorting>
</field>
<field>
<name>key</name>
<sorting>ascending</sorting>
</field>
</index>
</declaration>
</table>
</database>
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.0</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 @@ -44,17 +45,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 @@ -108,6 +114,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 @@ -124,7 +132,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 @@ -145,7 +153,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
Loading

0 comments on commit e91eba4

Please sign in to comment.