remove util::getPaths(), this function was broken and is replaced my util::getAllFiles(). When unsharing a folder only remove the share key for sub files if the user really no longer have access to the file. Can happen that a sub-file/-folder is shared to a group the user is a member of or explicitly once more to the same user

This commit is contained in:
Björn Schießle 2013-04-22 12:22:07 +02:00
parent 8790ceba25
commit 8a46e809f0
2 changed files with 14 additions and 58 deletions

View File

@ -196,7 +196,6 @@ class Hooks {
$sharingEnabled = \OCP\Share::isEnabled();
if ($params['itemType'] === 'folder') {
//list($owner, $ownerPath) = $util->getUidAndFilename($filePath);
$allFiles = $util->getAllFiles($path);
} else {
$allFiles = array($path);
@ -250,13 +249,21 @@ class Hooks {
$userIds = array($params['shareWith']);
}
// If path is a folder, get all children
$allPaths = $util->getPaths( $path );
if ($params['itemType'] === 'folder') {
$allFiles = $util->getAllFiles($path);
} else {
$allFiles = array($path);
}
foreach ( $allPaths as $path ) {
// Unshare each child path
if ( ! Keymanager::delShareKey( $view, $userIds, $path ) ) {
foreach ( $allFiles as $path ) {
// check if the user still has access to the file, otherwise delete share key
$sharingUsers = $util->getSharingUsersArray(true, $path);
// Unshare every user who no longer has access to the file
$delUsers = array_diff($userIds, $sharingUsers);
if ( ! Keymanager::delShareKey( $view, $delUsers, $path ) ) {
$failed[] = $path;

View File

@ -693,58 +693,7 @@ class Util {
);
}
/**
* @brief Expand given path to all sub files & folders
* @param string $path path which needs to be updated
* @return array $pathsArray all found file paths
* @note Paths of directories excluded, only *file* paths are returned
*/
public function getPaths( $path ) {
// Default return value is success
$result = true;
// Make path include 'files' dir for OC_FSV operations
$fPath = 'files' . $path;
// If we're handling a single file
if ( ! $this->view->is_dir( $fPath ) ) {
$pathsArray[] = $path;
// If we're handling a folder (recursively)
} else {
$subFiles = $this->view->getDirectoryContent( $fPath );
foreach ( $subFiles as $file ) {
$filePath = substr( $file['path'], 5 );
// If this is a nested file
if ( ! $this->view->is_dir( $fPath ) ) {
// Add the file path to array
$pathsArray[] = $path;
} else {
// If this is a nested folder
$dirPaths = $this->getPaths( $filePath );
// Add all subfiles & folders to the array
$pathsArray = array_merge( $dirPaths, $pathsArray );
}
}
}
return $pathsArray;
}
/**
* @brief Decrypt a keyfile without knowing how it was encrypted
* @param string $filePath