diff --git a/apps/files_encryption/hooks/hooks.php b/apps/files_encryption/hooks/hooks.php index df101acab9d9645ab23ae78e4bd44aec59685c96..3625d5a09f3ac3de581081547e32bcbe75718649 100644 --- a/apps/files_encryption/hooks/hooks.php +++ b/apps/files_encryption/hooks/hooks.php @@ -464,61 +464,44 @@ class Hooks { $newShareKeyPath = $ownerNew . '/files_encryption/share-keys/' . $pathNew; } - // add key ext if this is not an folder + // create new key folders if it doesn't exists + if (!$view->file_exists(dirname($newShareKeyPath))) { + $view->mkdir(dirname($newShareKeyPath)); + } + if (!$view->file_exists(dirname($newKeyfilePath))) { + $view->mkdir(dirname($newKeyfilePath)); + } + + // handle share keys if (!$view->is_dir($oldKeyfilePath)) { $oldKeyfilePath .= '.key'; $newKeyfilePath .= '.key'; // handle share-keys - $localKeyPath = $view->getLocalFile($oldShareKeyPath); - $escapedPath = Helper::escapeGlobPattern($localKeyPath); - $matches = glob($escapedPath . '*.shareKey'); + $matches = Helper::findShareKeys($oldShareKeyPath, $view); foreach ($matches as $src) { $dst = \OC\Files\Filesystem::normalizePath(str_replace($pathOld, $pathNew, $src)); - - // create destination folder if not exists - if (!file_exists(dirname($dst))) { - mkdir(dirname($dst), 0750, true); - } - - rename($src, $dst); + $view->rename($src, $dst); } } else { // handle share-keys folders - - // create destination folder if not exists - if (!$view->file_exists(dirname($newShareKeyPath))) { - mkdir($view->getLocalFile($newShareKeyPath), 0750, true); - } - $view->rename($oldShareKeyPath, $newShareKeyPath); } // Rename keyfile so it isn't orphaned if ($view->file_exists($oldKeyfilePath)) { - - // create destination folder if not exists - if (!$view->file_exists(dirname($newKeyfilePath))) { - mkdir(dirname($view->getLocalFile($newKeyfilePath)), 0750, true); - } - $view->rename($oldKeyfilePath, $newKeyfilePath); } - // build the path to the file - $newPath = '/' . $ownerNew . '/files' . $pathNew; + // update share keys + $sharingEnabled = \OCP\Share::isEnabled(); - if ($util->fixFileSize($newPath)) { - // get sharing app state - $sharingEnabled = \OCP\Share::isEnabled(); - - // get users - $usersSharing = $util->getSharingUsersArray($sharingEnabled, $pathNew); + // get users + $usersSharing = $util->getSharingUsersArray($sharingEnabled, $pathNew); - // update sharing-keys - $util->setSharedFileKeyfiles($session, $usersSharing, $pathNew); - } + // update sharing-keys + $util->setSharedFileKeyfiles($session, $usersSharing, $pathNew); \OC_FileProxy::$enabled = $proxyStatus; } diff --git a/apps/files_encryption/lib/helper.php b/apps/files_encryption/lib/helper.php index 2684bf7be3377a45d6196c3e81d81cf58b522c32..c6f18602b2b945b9e6d16615a2e9aa3e62c8810b 100755 --- a/apps/files_encryption/lib/helper.php +++ b/apps/files_encryption/lib/helper.php @@ -438,6 +438,30 @@ class Helper { return preg_replace('/(\*|\?|\[)/', '[$1]', $path); } + /** + * find all share keys for a given file + * @param string $path to the file + * @param \OC\Files\View $view view, relative to data/ + */ + public static function findShareKeys($path, $view) { + $result = array(); + $pathinfo = pathinfo($path); + $dirContent = $view->opendir($pathinfo['dirname']); + + if (is_resource($dirContent)) { + while (($file = readdir($dirContent)) !== false) { + if (!\OC\Files\Filesystem::isIgnoredDir($file)) { + if (preg_match("/" . $pathinfo['filename'] . ".(.*).shareKey/", $file)) { + $result[] = $pathinfo['dirname'] . '/' . $file; + } + } + } + closedir($dirContent); + } + + return $result; + } + /** * remember from which file the tmp file (getLocalFile() call) was created * @param string $tmpFile path of tmp file