summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/private/encryption/keys/storage.php55
-rw-r--r--tests/lib/encryption/keys/storage.php39
2 files changed, 63 insertions, 31 deletions
diff --git a/lib/private/encryption/keys/storage.php b/lib/private/encryption/keys/storage.php
index 692633f98da..fa317851a56 100644
--- a/lib/private/encryption/keys/storage.php
+++ b/lib/private/encryption/keys/storage.php
@@ -232,22 +232,8 @@ class Storage implements IStorage {
*/
public function renameKeys($source, $target) {
- list($owner, $source) = $this->util->getUidAndFilename($source);
- list(, $target) = $this->util->getUidAndFilename($target);
- $systemWideSource = $this->util->isSystemWideMountPoint($source, $owner);
- $systemWideTarget = $this->util->isSystemWideMountPoint($target, $owner);
-
- if ($systemWideSource) {
- $sourcePath = $this->keys_base_dir . $source . '/';
- } else {
- $sourcePath = '/' . $owner . $this->keys_base_dir . $source . '/';
- }
-
- if ($systemWideTarget) {
- $targetPath = $this->keys_base_dir . $target . '/';
- } else {
- $targetPath = '/' . $owner . $this->keys_base_dir . $target . '/';
- }
+ $sourcePath = $this->getPathToKeys($source);
+ $targetPath = $this->getPathToKeys($target);
if ($this->view->file_exists($sourcePath)) {
$this->keySetPreparation(dirname($targetPath));
@@ -259,6 +245,7 @@ class Storage implements IStorage {
return false;
}
+
/**
* copy keys if a file was renamed
*
@@ -268,21 +255,8 @@ class Storage implements IStorage {
*/
public function copyKeys($source, $target) {
- list($owner, $source) = $this->util->getUidAndFilename($source);
- list(, $target) = $this->util->getUidAndFilename($target);
- $systemWideTarget = $this->util->isSystemWideMountPoint($target, $owner);
- $systemWideSource = $this->util->isSystemWideMountPoint($source, $owner);
-
- if ($systemWideSource) {
- $sourcePath = $this->keys_base_dir . $source . '/';
- } else {
- $sourcePath = '/' . $owner . $this->keys_base_dir . $source . '/';
- }
- if ($systemWideTarget) {
- $targetPath = $this->keys_base_dir . $target . '/';
- } else {
- $targetPath = '/' . $owner . $this->keys_base_dir . $target . '/';
- }
+ $sourcePath = $this->getPathToKeys($source);
+ $targetPath = $this->getPathToKeys($target);
if ($this->view->file_exists($sourcePath)) {
$this->keySetPreparation(dirname($targetPath));
@@ -294,6 +268,25 @@ class Storage implements IStorage {
}
/**
+ * get system wide path and detect mount points
+ *
+ * @param string $path
+ * @return string
+ */
+ protected function getPathToKeys($path) {
+ list($owner, $relativePath) = $this->util->getUidAndFilename($path);
+ $systemWideMountPoint = $this->util->isSystemWideMountPoint($relativePath, $owner);
+
+ if ($systemWideMountPoint) {
+ $systemPath = $this->keys_base_dir . $relativePath . '/';
+ } else {
+ $systemPath = '/' . $owner . $this->keys_base_dir . $relativePath . '/';
+ }
+
+ return $systemPath;
+ }
+
+ /**
* Make preparations to filesystem for saving a key file
*
* @param string $path relative to the views root
diff --git a/tests/lib/encryption/keys/storage.php b/tests/lib/encryption/keys/storage.php
index 45cd272cca0..f64e61cd1df 100644
--- a/tests/lib/encryption/keys/storage.php
+++ b/tests/lib/encryption/keys/storage.php
@@ -361,7 +361,46 @@ class StorageTest extends TestCase {
array('/user1/files/source.txt', '/user1/files/target.txt', true, false,
'/files_encryption/keys/files/source.txt/', '/user1/files_encryption/keys/files/target.txt/'),
+ array('/user2/files/source.txt', '/user1/files/target.txt', false, false,
+ '/user2/files_encryption/keys/files/source.txt/', '/user1/files_encryption/keys/files/target.txt/'),
+ array('/user2/files/foo/source.txt', '/user1/files/target.txt', false, false,
+ '/user2/files_encryption/keys/files/foo/source.txt/', '/user1/files_encryption/keys/files/target.txt/'),
+ array('/user2/files/source.txt', '/user1/files/foo/target.txt', false, false,
+ '/user2/files_encryption/keys/files/source.txt/', '/user1/files_encryption/keys/files/foo/target.txt/'),
+ array('/user2/files/source.txt', '/user1/files/foo/target.txt', true, true,
+ '/files_encryption/keys/files/source.txt/', '/files_encryption/keys/files/foo/target.txt/'),
+ array('/user2/files/source.txt', '/user1/files/target.txt', false, true,
+ '/user2/files_encryption/keys/files/source.txt/', '/files_encryption/keys/files/target.txt/'),
+ array('/user2/files/source.txt', '/user1/files/target.txt', true, false,
+ '/files_encryption/keys/files/source.txt/', '/user1/files_encryption/keys/files/target.txt/'),
+ );
+ }
+ /**
+ * @dataProvider dataTestGetPathToKeys
+ *
+ * @param string $path
+ * @param boolean $systemWideMountPoint
+ * @param string $expected
+ */
+ public function testGetPathToKeys($path, $systemWideMountPoint, $expected) {
+
+ $this->util->expects($this->any())
+ ->method('getUidAndFilename')
+ ->will($this->returnCallback(array($this, 'getUidAndFilenameCallback')));
+ $this->util->expects($this->any())
+ ->method('isSystemWideMountPoint')
+ ->willReturn($systemWideMountPoint);
+
+ $this->assertSame($expected,
+ \Test_Helper::invokePrivate($this->storage, 'getPathToKeys', [$path])
+ );
+ }
+
+ public function dataTestGetPathToKeys() {
+ return array(
+ array('/user1/files/source.txt', false, '/user1/files_encryption/keys/files/source.txt/'),
+ array('/user1/files/source.txt', true, '/files_encryption/keys/files/source.txt/')
);
}