}\r
\r
/**\r
- * @brief\r
+ * update share keys if a file was shared\r
*/\r
public static function postShared($params) {\r
\r
\r
if ($params['itemType'] === 'file' || $params['itemType'] === 'folder') {\r
\r
- $view = new \OC\Files\View('/');\r
- $session = new \OCA\Encryption\Session($view);\r
- $userId = \OCP\User::getUser();\r
- $util = new Util($view, $userId);\r
$path = \OC\Files\Filesystem::getPath($params['fileSource']);\r
\r
- $sharingEnabled = \OCP\Share::isEnabled();\r
+ self::updateKeyfiles($path, $params['itemType']);\r
+ }\r
+ }\r
\r
- $mountManager = \OC\Files\Filesystem::getMountManager();\r
- $mount = $mountManager->find('/' . $userId . '/files' . $path);\r
- $mountPoint = $mount->getMountPoint();\r
+ /**\r
+ * update keyfiles and share keys recursively\r
+ *\r
+ * @param string $path to the file/folder\r
+ * @param string $type 'file' or 'folder'\r
+ */\r
+ private static function updateKeyfiles($path, $type) {\r
+ $view = new \OC\Files\View('/');\r
+ $userId = \OCP\User::getUser();\r
+ $session = new \OCA\Encryption\Session($view);\r
+ $util = new Util($view, $userId);\r
+ $sharingEnabled = \OCP\Share::isEnabled();\r
\r
- // if a folder was shared, get a list of all (sub-)folders\r
- if ($params['itemType'] === 'folder') {\r
- $allFiles = $util->getAllFiles($path, $mountPoint);\r
- } else {\r
- $allFiles = array($path);\r
- }\r
+ $mountManager = \OC\Files\Filesystem::getMountManager();\r
+ $mount = $mountManager->find('/' . $userId . '/files' . $path);\r
+ $mountPoint = $mount->getMountPoint();\r
\r
- foreach ($allFiles as $path) {\r
- $usersSharing = $util->getSharingUsersArray($sharingEnabled, $path);\r
- $util->setSharedFileKeyfiles($session, $usersSharing, $path);\r
- }\r
+ // if a folder was shared, get a list of all (sub-)folders\r
+ if ($type === 'folder') {\r
+ $allFiles = $util->getAllFiles($path, $mountPoint);\r
+ } else {\r
+ $allFiles = array($path);\r
+ }\r
+\r
+ foreach ($allFiles as $path) {\r
+ $usersSharing = $util->getSharingUsersArray($sharingEnabled, $path);\r
+ $util->setSharedFileKeyfiles($session, $usersSharing, $path);\r
}\r
}\r
\r
\OC_FileProxy::$enabled = false;\r
\r
$view = new \OC\Files\View('/');\r
- $session = new \OCA\Encryption\Session($view);\r
$userId = \OCP\User::getUser();\r
$util = new Util($view, $userId);\r
\r
isset(self::$renamedFiles[$params['oldpath']]['path'])) {\r
$ownerOld = self::$renamedFiles[$params['oldpath']]['uid'];\r
$pathOld = self::$renamedFiles[$params['oldpath']]['path'];\r
+ unset(self::$renamedFiles[$params['oldpath']]);\r
} else {\r
\OCP\Util::writeLog('Encryption library', "can't get path and owner from the file before it was renamed", \OCP\Util::DEBUG);\r
return false;\r
\r
// handle share keys\r
if (!$view->is_dir($oldKeyfilePath)) {\r
+ $type = 'file';\r
$oldKeyfilePath .= '.key';\r
$newKeyfilePath .= '.key';\r
\r
}\r
\r
} else {\r
+ $type = "folder";\r
// handle share-keys folders\r
$view->rename($oldShareKeyPath, $newShareKeyPath);\r
}\r
$view->rename($oldKeyfilePath, $newKeyfilePath);\r
}\r
\r
- // update share keys\r
- $sharingEnabled = \OCP\Share::isEnabled();\r
-\r
- // get users\r
- $usersSharing = $util->getSharingUsersArray($sharingEnabled, $pathNew);\r
\r
// update sharing-keys\r
- $util->setSharedFileKeyfiles($session, $usersSharing, $pathNew);\r
+ self::updateKeyfiles($params['newpath'], $type);\r
\r
\OC_FileProxy::$enabled = $proxyStatus;\r
}\r
$this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename);
}
+ /**
+ * test if additional share keys are added if we move a folder to a shared parent
+ * @medium
+ */
+ function testMoveFolder() {
+
+ $view = new \OC\Files\View('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1);
+
+ $filename = '/tmp-' . uniqid();
+ $folder = '/folder' . uniqid();
+
+ \OC\Files\Filesystem::mkdir($folder);
+
+ // Save long data as encrypted file using stream wrapper
+ $cryptedFile = \OC\Files\Filesystem::file_put_contents($folder . $filename, $this->dataShort);
+
+ // Test that data was successfully written
+ $this->assertTrue(is_int($cryptedFile));
+
+ // Get file decrypted contents
+ $decrypt = \OC\Files\Filesystem::file_get_contents($folder . $filename);
+
+ $this->assertEquals($this->dataShort, $decrypt);
+
+ $newFolder = '/newfolder/subfolder' . uniqid();
+ \OC\Files\Filesystem::mkdir('/newfolder');
+
+ // get the file info from previous created file
+ $fileInfo = \OC\Files\Filesystem::getFileInfo('/newfolder');
+ $this->assertTrue($fileInfo instanceof \OC\Files\FileInfo);
+
+ // share the folder
+ \OCP\Share::shareItem('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, OCP\PERMISSION_ALL);
+
+ \OC\Files\Filesystem::rename($folder, $newFolder);
+
+ // Get file decrypted contents
+ $newDecrypt = \OC\Files\Filesystem::file_get_contents($newFolder . $filename);
+ $this->assertEquals($this->dataShort, $newDecrypt);
+
+ // check if additional share key for user2 exists
+ $this->assertTrue($view->file_exists('files_encryption/share-keys' . $newFolder . '/' . $filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey'));
+
+ // tear down
+ \OC\Files\Filesystem::unlink($newFolder);
+ \OC\Files\Filesystem::unlink('/newfolder');
+ }
+
}