*/\r
class Hooks {\r
\r
+ // file for which we want to rename the keys after the rename operation was successful\r
+ private static $renamedFiles = array();\r
+\r
/**\r
* @brief Startup encryption backend upon user login\r
* @note This method should never be called for users using client side encryption\r
}\r
}\r
\r
+ /**\r
+ * @brief mark file as renamed so that we know the original source after the file was renamed\r
+ * @param string $path\r
+ */\r
+ public static function preRename($params) {\r
+ $util = new Util(new \OC_FilesystemView('/'), \OCP\User::getUser());\r
+ list($ownerOld, $pathOld) = $util->getUidAndFilename($params['oldpath']);\r
+ self::$renamedFiles[$params['oldpath']] = array(\r
+ 'uid' => $ownerOld,\r
+ 'path' => $pathOld);\r
+ }\r
+\r
/**\r
* @brief after a file is renamed, rename its keyfile and share-keys also fix the file size and fix also the sharing\r
* @param array with oldpath and newpath\r
$userId = \OCP\User::getUser();\r
$util = new Util($view, $userId);\r
\r
+ $ownerOld = self::$renamedFiles[$params['oldpath']]['uid'];\r
+ $pathOld = self::$renamedFiles[$params['oldpath']]['path'];\r
+ list($ownerNew, $pathNew) = $util->getUidAndFilename($params['newpath']);\r
+\r
// Format paths to be relative to user files dir\r
- if ($util->isSystemWideMountPoint($params['oldpath'])) {\r
- $baseDir = 'files_encryption/';\r
- $oldKeyfilePath = $baseDir . 'keyfiles/' . $params['oldpath'];\r
+ if ($util->isSystemWideMountPoint($pathOld)) {\r
+ $oldKeyfilePath = 'files_encryption/keyfiles/' . $pathOld;\r
+ $oldShareKeyPath = 'files_encryption/share-keys/' . $pathOld;\r
} else {\r
- $baseDir = $userId . '/' . 'files_encryption/';\r
- $oldKeyfilePath = $baseDir . 'keyfiles/' . $params['oldpath'];\r
+ $oldKeyfilePath = $ownerOld . '/' . 'files_encryption/keyfiles/' . $pathOld;\r
+ $oldShareKeyPath = $ownerOld . '/' . 'files_encryption/share-keys/' . $pathOld;\r
}\r
\r
- if ($util->isSystemWideMountPoint($params['newpath'])) {\r
- $newKeyfilePath = $baseDir . 'keyfiles/' . $params['newpath'];\r
+ if ($util->isSystemWideMountPoint($pathNew)) {\r
+ $newKeyfilePath = 'files_encryption/keyfiles/' . $pathNew;\r
+ $newShareKeyPath = 'files_encryption/share-keys/' . $pathNew;\r
} else {\r
- $newKeyfilePath = $baseDir . 'keyfiles/' . $params['newpath'];\r
+ $newKeyfilePath = $ownerNew . '/files_encryption/keyfiles/' . $pathNew;\r
+ $newShareKeyPath = $ownerNew . '/files_encryption/share-keys/' . $pathNew;\r
}\r
\r
// add key ext if this is not an folder\r
$newKeyfilePath .= '.key';\r
\r
// handle share-keys\r
- $localKeyPath = $view->getLocalFile($baseDir . 'share-keys/' . $params['oldpath']);\r
+ $localKeyPath = $view->getLocalFile($oldShareKeyPath);\r
$escapedPath = Helper::escapeGlobPattern($localKeyPath);\r
$matches = glob($escapedPath . '*.shareKey');\r
foreach ($matches as $src) {\r
- $dst = \OC\Files\Filesystem::normalizePath(str_replace($params['oldpath'], $params['newpath'], $src));\r
+ $dst = \OC\Files\Filesystem::normalizePath(str_replace($pathOld, $pathNew, $src));\r
\r
// create destination folder if not exists\r
if (!file_exists(dirname($dst))) {\r
\r
} else {\r
// handle share-keys folders\r
- $oldShareKeyfilePath = $baseDir . 'share-keys/' . $params['oldpath'];\r
- $newShareKeyfilePath = $baseDir . 'share-keys/' . $params['newpath'];\r
\r
// create destination folder if not exists\r
- if (!$view->file_exists(dirname($newShareKeyfilePath))) {\r
- $view->mkdir(dirname($newShareKeyfilePath), 0750, true);\r
+ if (!$view->file_exists(dirname($newShareKeyPath))) {\r
+ $view->mkdir(dirname($newShareKeyPath), 0750, true);\r
}\r
\r
- $view->rename($oldShareKeyfilePath, $newShareKeyfilePath);\r
+ $view->rename($oldShareKeyPath, $newShareKeyPath);\r
}\r
\r
// Rename keyfile so it isn't orphaned\r
}\r
\r
// build the path to the file\r
- $newPath = '/' . $userId . '/files' . $params['newpath'];\r
- $newPathRelative = $params['newpath'];\r
+ $newPath = '/' . $ownerNew . '/files' . $pathNew;\r
\r
if ($util->fixFileSize($newPath)) {\r
// get sharing app state\r
$sharingEnabled = \OCP\Share::isEnabled();\r
\r
// get users\r
- $usersSharing = $util->getSharingUsersArray($sharingEnabled, $newPathRelative);\r
+ $usersSharing = $util->getSharingUsersArray($sharingEnabled, $pathNew);\r
\r
// update sharing-keys\r
- $util->setSharedFileKeyfiles($session, $usersSharing, $newPathRelative);\r
+ $util->setSharedFileKeyfiles($session, $usersSharing, $pathNew);\r
}\r
\r
\OC_FileProxy::$enabled = $proxyStatus;\r