summaryrefslogtreecommitdiffstats
path: root/apps/files_encryption/lib/keymanager.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files_encryption/lib/keymanager.php')
-rwxr-xr-xapps/files_encryption/lib/keymanager.php54
1 files changed, 32 insertions, 22 deletions
diff --git a/apps/files_encryption/lib/keymanager.php b/apps/files_encryption/lib/keymanager.php
index 931469f4b74..9560126ef33 100755
--- a/apps/files_encryption/lib/keymanager.php
+++ b/apps/files_encryption/lib/keymanager.php
@@ -459,13 +459,17 @@ class Keymanager {
\OCP\Util::writeLog('files_encryption', 'delAllShareKeys: delete share keys: ' . $baseDir . $filePath, \OCP\Util::DEBUG);
$result = $view->unlink($baseDir . $filePath);
} else {
- $parentDir = dirname($baseDir . $filePath);
- $filename = pathinfo($filePath, PATHINFO_BASENAME);
- foreach($view->getDirectoryContent($parentDir) as $content) {
- $path = $content['path'];
- if (self::getFilenameFromShareKey($content['name']) === $filename) {
- \OCP\Util::writeLog('files_encryption', 'dellAllShareKeys: delete share keys: ' . '/' . $userId . '/' . $path, \OCP\Util::DEBUG);
- $result &= $view->unlink('/' . $userId . '/' . $path);
+ $sharingEnabled = \OCP\Share::isEnabled();
+ $users = $util->getSharingUsersArray($sharingEnabled, $filePath);
+ foreach($users as $user) {
+ $keyName = $baseDir . $filePath . '.' . $user . '.shareKey';
+ if ($view->file_exists($keyName)) {
+ \OCP\Util::writeLog(
+ 'files_encryption',
+ 'dellAllShareKeys: delete share keys: "' . $keyName . '"',
+ \OCP\Util::DEBUG
+ );
+ $result &= $view->unlink($keyName);
}
}
}
@@ -539,17 +543,20 @@ class Keymanager {
if ($view->is_dir($dir . '/' . $file)) {
self::recursiveDelShareKeys($dir . '/' . $file, $userIds, $owner, $view);
} else {
- $realFile = $realFileDir . self::getFilenameFromShareKey($file);
foreach ($userIds as $userId) {
- if (preg_match("/(.*)." . $userId . ".shareKey/", $file)) {
- if ($userId === $owner &&
- $view->file_exists($realFile)) {
- \OCP\Util::writeLog('files_encryption', 'original file still exists, keep owners share key!', \OCP\Util::ERROR);
- continue;
- }
- \OCP\Util::writeLog('files_encryption', 'recursiveDelShareKey: delete share key: ' . $file, \OCP\Util::DEBUG);
- $view->unlink($dir . '/' . $file);
+ $fileNameFromShareKey = self::getFilenameFromShareKey($file, $userId);
+ if (!$fileNameFromShareKey) {
+ continue;
}
+ $realFile = $realFileDir . $fileNameFromShareKey;
+
+ if ($userId === $owner &&
+ $view->file_exists($realFile)) {
+ \OCP\Util::writeLog('files_encryption', 'original file still exists, keep owners share key!', \OCP\Util::ERROR);
+ continue;
+ }
+ \OCP\Util::writeLog('files_encryption', 'recursiveDelShareKey: delete share key: ' . $file, \OCP\Util::DEBUG);
+ $view->unlink($dir . '/' . $file);
}
}
}
@@ -591,16 +598,19 @@ class Keymanager {
/**
* extract filename from share key name
* @param string $shareKey (filename.userid.sharekey)
+ * @param string $userId
* @return string|false filename or false
*/
- protected static function getFilenameFromShareKey($shareKey) {
- $parts = explode('.', $shareKey);
+ protected static function getFilenameFromShareKey($shareKey, $userId) {
+ $expectedSuffix = '.' . $userId . '.' . 'shareKey';
+ $suffixLen = strlen($expectedSuffix);
- $filename = false;
- if(count($parts) > 2) {
- $filename = implode('.', array_slice($parts, 0, count($parts)-2));
+ $suffix = substr($shareKey, -$suffixLen);
+
+ if ($suffix !== $expectedSuffix) {
+ return false;
}
- return $filename;
+ return substr($shareKey, 0, -$suffixLen);
}
}