fix setting mountpoint and auth backend of external storages

This commit is contained in:
Robin Appelman 2015-12-15 13:24:30 +01:00 committed by Vincent Petry
parent 88c4cba1f5
commit ab549970ca
4 changed files with 93 additions and 0 deletions

View File

@ -212,6 +212,34 @@ class DBConfigService {
$query->execute();
}
/**
* @param int $mountId
* @param string $newMountPoint
*/
public function setMountPoint($mountId, $newMountPoint) {
$builder = $this->connection->getQueryBuilder();
$query = $builder->update('external_mounts')
->set('mount_point', $builder->createNamedParameter($newMountPoint))
->where($builder->expr()->eq('mount_id', $builder->createNamedParameter($mountId, \PDO::PARAM_INT)));
$query->execute();
}
/**
* @param int $mountId
* @param string $newAuthBackend
*/
public function setAuthBackend($mountId, $newAuthBackend) {
$builder = $this->connection->getQueryBuilder();
$query = $builder->update('external_mounts')
->set('auth_backend', $builder->createNamedParameter($newAuthBackend))
->where($builder->expr()->eq('mount_id', $builder->createNamedParameter($mountId, \PDO::PARAM_INT)));
$query->execute();
}
/**
* @param int $mountId
* @param string $key

View File

@ -392,6 +392,14 @@ abstract class StoragesService {
$this->dbConfig->setOption($id, $key, $value);
}
if ($updatedStorage->getMountPoint() !== $oldStorage->getMountPoint()) {
$this->dbConfig->setMountPoint($id, $updatedStorage->getMountPoint());
}
if ($updatedStorage->getAuthMechanism()->getIdentifier() !== $oldStorage->getAuthMechanism()->getIdentifier()) {
$this->dbConfig->setAuthBackend($id, $updatedStorage->getAuthMechanism()->getIdentifier());
}
$this->triggerChangeHooks($oldStorage, $updatedStorage);
return $this->getStorage($id);

View File

@ -230,4 +230,32 @@ class DBConfigServiceTest extends TestCase {
$this->assertEquals($id1, $mounts[0]['mount_id']);
$this->assertEquals([['type' => DBConfigService::APPLICABLE_TYPE_GLOBAL, 'value' => null, 'mount_id' => $id1]], $mounts[0]['applicable']);
}
public function testSetMountPoint() {
$id1 = $this->addMount('/test', 'foo', 'bar', 100, DBConfigService::MOUNT_TYPE_ADMIN);
$id2 = $this->addMount('/foo', 'foo', 'bar', 100, DBConfigService::MOUNT_TYPE_ADMIN);
$this->dbConfig->setMountPoint($id1, '/asd');
$mount = $this->dbConfig->getMountById($id1);
$this->assertEquals('/asd', $mount['mount_point']);
// remains unchanged
$mount = $this->dbConfig->getMountById($id2);
$this->assertEquals('/foo', $mount['mount_point']);
}
public function testSetAuthBackend() {
$id1 = $this->addMount('/test', 'foo', 'bar', 100, DBConfigService::MOUNT_TYPE_ADMIN);
$id2 = $this->addMount('/foo', 'foo', 'bar', 100, DBConfigService::MOUNT_TYPE_ADMIN);
$this->dbConfig->setAuthBackend($id1, 'none');
$mount = $this->dbConfig->getMountById($id1);
$this->assertEquals('none', $mount['auth_backend']);
// remains unchanged
$mount = $this->dbConfig->getMountById($id2);
$this->assertEquals('bar', $mount['auth_backend']);
}
}

View File

@ -465,4 +465,33 @@ abstract class StoragesServiceTest extends \Test\TestCase {
$params[Filesystem::signal_param_users]
);
}
public function testUpdateStorageMountPoint() {
$backend = $this->backendService->getBackend('identifier:\OCA\Files_External\Lib\Backend\SMB');
$authMechanism = $this->backendService->getAuthMechanism('identifier:\Auth\Mechanism');
$storage = new StorageConfig();
$storage->setMountPoint('mountpoint');
$storage->setBackend($backend);
$storage->setAuthMechanism($authMechanism);
$storage->setBackendOptions(['password' => 'testPassword']);
$savedStorage = $this->service->addStorage($storage);
$newAuthMechanism = $this->backendService->getAuthMechanism('identifier:\Other\Auth\Mechanism');
$updatedStorage = new StorageConfig($savedStorage->getId());
$updatedStorage->setMountPoint('mountpoint2');
$updatedStorage->setBackend($backend);
$updatedStorage->setAuthMechanism($newAuthMechanism);
$updatedStorage->setBackendOptions(['password' => 'password2']);
$this->service->updateStorage($updatedStorage);
$savedStorage = $this->service->getStorage($updatedStorage->getId());
$this->assertEquals('/mountpoint2', $savedStorage->getMountPoint());
$this->assertEquals($newAuthMechanism, $savedStorage->getAuthMechanism());
$this->assertEquals('password2', $savedStorage->getBackendOption('password'));
}
}