delete all share keys if a file gets deleted

This commit is contained in:
Björn Schießle 2013-04-22 15:29:58 +02:00
parent b5cb5dab51
commit a4364a93d0
2 changed files with 23 additions and 9 deletions

View file

@ -391,7 +391,26 @@ class Keymanager {
return $result;
}
/**
* @brief delete all share keys of a given file
* @param \OC_FilesystemView $view
* @param type $userId owner of the file
* @param type $filePath path to the file, relative to the owners file dir
*/
public static function delAllShareKeys(\OC_FilesystemView $view, $userId, $filePath) {
if ($view->is_dir($userId.'/files/'.$filePath)) {
$view->unlink($userId.'/files_encryption/share-keys/'.$filePath);
} else {
$localKeyPath = $view->getLocalFile($userId.'/files_encryption/share-keys/'.$filePath);
$matches = glob(preg_quote($localKeyPath).'*.shareKey');
foreach ($matches as $ma) {
unlink($ma);
}
}
}
/**
* @brief Delete a single user's shareKey for a single file
*/

View file

@ -256,18 +256,13 @@ class Proxy extends \OC_FileProxy {
// Format path to be relative to user files dir
$relPath = $util->stripUserFilesPath( $path );
// list( $owner, $ownerPath ) = $util->getUidAndFilename( $relPath );
$fileOwner = \OC\Files\Filesystem::getOwner( $path );
$ownerPath = $util->stripUserFilesPath( $path ); // TODO: Don't trust $path, fetch owner path
$filePath = $fileOwner . '/' . 'files_encryption' . '/' . 'keyfiles' . '/'. $ownerPath;
list( $owner, $ownerPath ) = $util->getUidAndFilename( $relPath );
// Delete keyfile & shareKey so it isn't orphaned
if (
! (
Keymanager::deleteFileKey( $view, $fileOwner, $ownerPath )
&& Keymanager::delShareKey( $view, $fileOwner, $ownerPath )
Keymanager::deleteFileKey( $view, $owner, $ownerPath )
&& Keymanager::delAllShareKeys( $view, $owner, $ownerPath )
)
) {