fix mount point detection
This commit is contained in:
parent
89d6439445
commit
570dd17d4f
|
@ -283,7 +283,7 @@ class Migration {
|
||||||
$this->renameFileKeys($user, $path . '/' . $file, $trash);
|
$this->renameFileKeys($user, $path . '/' . $file, $trash);
|
||||||
} else {
|
} else {
|
||||||
$target = $this->getTargetDir($user, $path, $file, $trash);
|
$target = $this->getTargetDir($user, $path, $file, $trash);
|
||||||
if ($target) {
|
if ($target !== false) {
|
||||||
$this->createPathForKeys(dirname($target));
|
$this->createPathForKeys(dirname($target));
|
||||||
$this->view->rename($user . '/' . $path . '/' . $file, $target);
|
$this->view->rename($user . '/' . $path . '/' . $file, $target);
|
||||||
} else {
|
} else {
|
||||||
|
@ -303,6 +303,7 @@ class Migration {
|
||||||
* get system mount points
|
* get system mount points
|
||||||
* wrap static method so that it can be mocked for testing
|
* wrap static method so that it can be mocked for testing
|
||||||
*
|
*
|
||||||
|
* @internal
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function getSystemMountPoints() {
|
protected function getSystemMountPoints() {
|
||||||
|
@ -329,10 +330,11 @@ class Migration {
|
||||||
|
|
||||||
if ($user === '') {
|
if ($user === '') {
|
||||||
// for system wide mounts we need to check if the mount point really exists
|
// for system wide mounts we need to check if the mount point really exists
|
||||||
$normalized = trim($filePath, '/');
|
$normalized = \OC\Files\Filesystem::normalizePath($filePath);
|
||||||
$systemMountPoints = $this->getSystemMountPoints();
|
$systemMountPoints = $this->getSystemMountPoints();
|
||||||
foreach ($systemMountPoints as $mountPoint) {
|
foreach ($systemMountPoints as $mountPoint) {
|
||||||
if (strpos($normalized, $mountPoint['mountpoint']) === 0)
|
$normalizedMountPoint = \OC\Files\Filesystem::normalizePath($mountPoint['mountpoint']) . '/';
|
||||||
|
if (strpos($normalized, $normalizedMountPoint) === 0)
|
||||||
return $targetDir;
|
return $targetDir;
|
||||||
}
|
}
|
||||||
} else if ($trash === false && $this->view->file_exists('/' . $user. '/files/' . $filePath)) {
|
} else if ($trash === false && $this->view->file_exists('/' . $user. '/files/' . $filePath)) {
|
||||||
|
|
|
@ -179,7 +179,6 @@ class MigrationTest extends \Test\TestCase {
|
||||||
$m->expects($this->any())->method('getSystemMountPoints')
|
$m->expects($this->any())->method('getSystemMountPoints')
|
||||||
->willReturn([['mountpoint' => 'folder1'], ['mountpoint' => 'folder2']]);
|
->willReturn([['mountpoint' => 'folder1'], ['mountpoint' => 'folder2']]);
|
||||||
|
|
||||||
//$m = new Migration(\OC::$server->getConfig(), new \OC\Files\View(), \OC::$server->getDatabaseConnection(), $this->logger);
|
|
||||||
$m->reorganizeFolderStructure();
|
$m->reorganizeFolderStructure();
|
||||||
// even if it runs twice folder should always move only once
|
// even if it runs twice folder should always move only once
|
||||||
$m->reorganizeFolderStructure();
|
$m->reorganizeFolderStructure();
|
||||||
|
@ -450,4 +449,80 @@ class MigrationTest extends \Test\TestCase {
|
||||||
$this->assertSame(19, count($result));
|
$this->assertSame(19, count($result));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider dataTestGetTargetDir
|
||||||
|
*/
|
||||||
|
public function testGetTargetDir($user, $keyPath, $filename, $trash, $systemMounts, $expected) {
|
||||||
|
|
||||||
|
$updater = $this->getMockBuilder('\OC\Files\Cache\Updater')
|
||||||
|
->disableOriginalConstructor()->getMock();
|
||||||
|
$view = $this->getMockBuilder('\OC\Files\View')
|
||||||
|
->disableOriginalConstructor()->getMock();
|
||||||
|
$view->expects($this->any())->method('file_exists')->willReturn(true);
|
||||||
|
$view->expects($this->any())->method('getUpdater')->willReturn($updater);
|
||||||
|
|
||||||
|
|
||||||
|
$m = $this->getMockBuilder('OCA\Encryption\Migration')
|
||||||
|
->setConstructorArgs(
|
||||||
|
[
|
||||||
|
\OC::$server->getConfig(),
|
||||||
|
$view,
|
||||||
|
\OC::$server->getDatabaseConnection(),
|
||||||
|
$this->logger
|
||||||
|
]
|
||||||
|
)->setMethods(['getSystemMountPoints'])->getMock();
|
||||||
|
|
||||||
|
$m->expects($this->any())->method('getSystemMountPoints')
|
||||||
|
->willReturn($systemMounts);
|
||||||
|
|
||||||
|
$this->assertSame($expected,
|
||||||
|
$this->invokePrivate($m, 'getTargetDir', [$user, $keyPath, $filename, $trash])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function dataTestGetTargetDir() {
|
||||||
|
return [
|
||||||
|
[
|
||||||
|
'user1',
|
||||||
|
'/files_encryption/keys/foo/bar.txt',
|
||||||
|
'user1.shareKey',
|
||||||
|
false,
|
||||||
|
[],
|
||||||
|
'user1/files_encryption/keys/files/foo/bar.txt/OC_DEFAULT_MODULE/user1.shareKey'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'user1',
|
||||||
|
'/files_trashbin/keys/foo/bar.txt',
|
||||||
|
'user1.shareKey',
|
||||||
|
true,
|
||||||
|
[],
|
||||||
|
'user1/files_encryption/keys/files_trashbin/foo/bar.txt/OC_DEFAULT_MODULE/user1.shareKey'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'',
|
||||||
|
'/files_encryption/keys/foo/bar.txt',
|
||||||
|
'user1.shareKey',
|
||||||
|
false,
|
||||||
|
[['mountpoint' => 'foo']],
|
||||||
|
'/files_encryption/keys/files/foo/bar.txt/OC_DEFAULT_MODULE/user1.shareKey'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'',
|
||||||
|
'/files_encryption/keys/foo/bar.txt',
|
||||||
|
'user1.shareKey',
|
||||||
|
false,
|
||||||
|
[['mountpoint' => 'foobar']],
|
||||||
|
false
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'',
|
||||||
|
'/files_encryption/keys/foobar/bar.txt',
|
||||||
|
'user1.shareKey',
|
||||||
|
false,
|
||||||
|
[['mountpoint' => 'foo']],
|
||||||
|
false
|
||||||
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue