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:
parent
8790ceba25
commit
8a46e809f0
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue