/**\r
* @brief \r
*/\r
- public static function postShared($params) {\r
+ public static function postShared( $params ) {\r
\r
// NOTE: $params has keys:\r
// [itemType] => file\r
// [id] => 10\r
// [token] =>\r
// TODO: Should other kinds of item be encrypted too?\r
- if ($params['itemType'] === 'file' || $params['itemType'] === 'folder') {\r
+ \r
+ if ( $params['itemType'] === 'file' || $params['itemType'] === 'folder' ) {\r
\r
- $view = new \OC_FilesystemView('/');\r
+ $view = new \OC_FilesystemView( '/' );\r
$session = new Session($view);\r
$userId = \OCP\User::getUser();\r
$util = new Util($view, $userId);\r
- $path = $util->fileIdToPath($params['itemSource']);\r
-\r
- //if parent is set, then this is a re-share action\r
- if($params['parent']) {\r
-\r
- // get the parent from current share\r
- $parent = $util->getShareParent($params['parent']);\r
-\r
- // if parent is file the it is an 1:1 share\r
- if($parent['item_type'] === 'file') {\r
-\r
- // prefix path with Shared\r
- $path = '/Shared'.$parent['file_target'];\r
-\r
- } else {\r
- // parent is folder but shared was a file!\r
- // we try to rebuild the missing path\r
- // some examples we face here\r
- // user1 share folder1 with user2 folder1 has the following structure /folder1/subfolder1/subsubfolder1/somefile.txt\r
- // user2 re-share subfolder2 with user3\r
- // user3 re-share somefile.txt user4\r
- // so our path should be /Shared/subfolder1/subsubfolder1/somefile.txt while user3 is sharing\r
- if($params['itemType'] === 'file') {\r
- // get target path\r
- $targetPath = $util->fileIdToPath($params['fileSource']);\r
- $targetPathSplit = array_reverse(explode('/', $targetPath));\r
-\r
- // init values\r
- $path = '';\r
- $sharedPart = ltrim( $parent['file_target'], '/' );\r
-\r
- // rebuild path\r
- foreach ($targetPathSplit as $pathPart) {\r
- if($pathPart !== $sharedPart) {\r
- $path = '/'.$pathPart.$path;\r
- } else {\r
- break;\r
- }\r
- }\r
-\r
- // prefix path with Shared\r
- $path = '/Shared'.$parent['file_target'].$path;\r
-\r
- } else {\r
-\r
- // prefix path with Shared\r
- $path = '/Shared'.$parent['file_target'].$params['fileTarget'];\r
- }\r
- }\r
- }\r
+ $path = $util->fileIdToPath( $params['itemSource'] );\r
+\r
+ //if parent is set, then this is a re-share action\r
+ if( $params['parent'] ) {\r
+\r
+ // get the parent from current share\r
+ $parent = $util->getShareParent( $params['parent'] );\r
+\r
+ // if parent is file the it is an 1:1 share\r
+ if($parent['item_type'] === 'file') {\r
+\r
+ // prefix path with Shared\r
+ $path = '/Shared'.$parent['file_target'];\r
+\r
+ } else {\r
+ \r
+ // NOTE: parent is folder but shared was a file!\r
+ // we try to rebuild the missing path\r
+ // some examples we face here\r
+ // user1 share folder1 with user2 folder1 has \r
+ // the following structure \r
+ // /folder1/subfolder1/subsubfolder1/somefile.txt\r
+ // user2 re-share subfolder2 with user3\r
+ // user3 re-share somefile.txt user4\r
+ // so our path should be \r
+ // /Shared/subfolder1/subsubfolder1/somefile.txt \r
+ // while user3 is sharing\r
+ \r
+ if ( $params['itemType'] === 'file' ) {\r
+ // get target path\r
+ $targetPath = $util->fileIdToPath( $params['fileSource'] );\r
+ $targetPathSplit = array_reverse( explode( '/', $targetPath ) );\r
+\r
+ // init values\r
+ $path = '';\r
+ $sharedPart = ltrim( $parent['file_target'], '/' );\r
+\r
+ // rebuild path\r
+ foreach ( $targetPathSplit as $pathPart ) {\r
+ \r
+ if( $pathPart !== $sharedPart ) {\r
+ \r
+ $path = '/' . $pathPart . $path;\r
+ \r
+ } else {\r
+ \r
+ break;\r
+ \r
+ }\r
+ \r
+ }\r
+\r
+ // prefix path with Shared\r
+ $path = '/Shared'.$parent['file_target'].$path;\r
+\r
+ } else {\r
+\r
+ // prefix path with Shared\r
+ $path = '/Shared'.$parent['file_target'].$params['fileTarget'];\r
+ }\r
+ }\r
+ }\r
\r
- $sharingEnabled = \OCP\Share::isEnabled();\r
+ $sharingEnabled = \OCP\Share::isEnabled();\r
\r
// if a folder was shared, get a list if all (sub-)folders\r
- if ($params['itemType'] === 'folder') {\r
+ if ( $params['itemType'] === 'folder' ) {\r
$allFiles = $util->getAllFiles($path);\r
} else {\r
- $allFiles = array($path);\r
+ \r
+ $allFiles = array( $path );\r
+ \r
}\r
\r
- foreach ($allFiles as $path) {\r
- $usersSharing = $util->getSharingUsersArray($sharingEnabled, $path);\r
+ foreach ( $allFiles as $path ) {\r
+ \r
+ $usersSharing = $util->getSharingUsersArray( $sharingEnabled, $path );\r
\r
$failed = array();\r
\r
// Attempt to set shareKey\r
- if (!$util->setSharedFileKeyfiles($session, $usersSharing, $path)) {\r
+ if ( !$util->setSharedFileKeyfiles( $session, $usersSharing, $path ) ) {\r
\r
$failed[] = $path;\r
}\r
}\r
\r
// If no attempts to set keyfiles failed\r
- if (empty($failed)) {\r
+ if ( empty( $failed ) ) {\r
+ \r
return true;\r
+ \r
} else {\r
+ \r
return false;\r
+ \r
}\r
}\r
}\r
/**\r
* @brief \r
*/\r
- public static function postUnshare($params)\r
- {\r
-\r
- // NOTE: $params has keys:\r
- // [itemType] => file\r
- // [itemSource] => 13\r
- // [shareType] => 0\r
- // [shareWith] => test1\r
- // [itemParent] =>\r
-\r
- if ($params['itemType'] === 'file' || $params['itemType'] === 'folder') {\r
-\r
- $view = new \OC_FilesystemView('/');\r
- $userId = \OCP\User::getUser();\r
- $util = new Util($view, $userId);\r
- $path = $util->fileIdToPath($params['itemSource']);\r
-\r
- // check if this is a re-share\r
- if ($params['itemParent']) {\r
-\r
- // get the parent from current share\r
- $parent = $util->getShareParent($params['itemParent']);\r
-\r
- // get target path\r
- $targetPath = $util->fileIdToPath($params['itemSource']);\r
- $targetPathSplit = array_reverse(explode('/', $targetPath));\r
-\r
- // init values\r
- $path = '';\r
- $sharedPart = ltrim($parent['file_target'], '/');\r
-\r
- // rebuild path\r
- foreach ($targetPathSplit as $pathPart) {\r
- if ($pathPart !== $sharedPart) {\r
- $path = '/' . $pathPart . $path;\r
- } else {\r
- break;\r
- }\r
- }\r
-\r
- // prefix path with Shared\r
- $path = '/Shared' . $parent['file_target'] . $path;\r
- }\r
+ public static function postUnshare( $params ) {\r
\r
- // for group shares get a list of the group members\r
- if ($params['shareType'] == \OCP\Share::SHARE_TYPE_GROUP) {\r
- $userIds = \OC_Group::usersInGroup($params['shareWith']);\r
- } else {\r
- $userIds = array($params['shareWith']);\r
- }\r
+ // NOTE: $params has keys:\r
+ // [itemType] => file\r
+ // [itemSource] => 13\r
+ // [shareType] => 0\r
+ // [shareWith] => test1\r
+ // [itemParent] =>\r
\r
- // if we unshare a folder we need a list of all (sub-)files\r
- if ($params['itemType'] === 'folder') {\r
- $allFiles = $util->getAllFiles($path);\r
- } else {\r
- $allFiles = array($path);\r
- }\r
+ if ( $params['itemType'] === 'file' || $params['itemType'] === 'folder' ) {\r
\r
- foreach ($allFiles as $path) {\r
+ $view = new \OC_FilesystemView( '/' );\r
+ $userId = \OCP\User::getUser();\r
+ $util = new Util( $view, $userId);\r
+ $path = $util->fileIdToPath( $params['itemSource'] );\r
\r
- // check if the user still has access to the file, otherwise delete share key\r
- $sharingUsers = $util->getSharingUsersArray(true, $path);\r
+ // check if this is a re-share\r
+ if ( $params['itemParent'] ) {\r
\r
- // Unshare every user who no longer has access to the file\r
- $delUsers = array_diff($userIds, $sharingUsers);\r
- if (!Keymanager::delShareKey($view, $delUsers, $path)) {\r
- $failed[] = $path;\r
- }\r
+ // get the parent from current share\r
+ $parent = $util->getShareParent( $params['itemParent'] );\r
\r
- }\r
+ // get target path\r
+ $targetPath = $util->fileIdToPath( $params['itemSource'] );\r
+ $targetPathSplit = array_reverse( explode( '/', $targetPath ) );\r
\r
- // If no attempts to set keyfiles failed\r
- if (empty($failed)) {\r
- return true;\r
- } else {\r
- return false;\r
- }\r
- }\r
- }\r
+ // init values\r
+ $path = '';\r
+ $sharedPart = ltrim( $parent['file_target'], '/' );\r
+\r
+ // rebuild path\r
+ foreach ( $targetPathSplit as $pathPart ) {\r
+ \r
+ if ( $pathPart !== $sharedPart ) {\r
+ \r
+ $path = '/' . $pathPart . $path;\r
+ \r
+ } else {\r
+ \r
+ break;\r
+ \r
+ }\r
+ \r
+ }\r
+\r
+ // prefix path with Shared\r
+ $path = '/Shared' . $parent['file_target'] . $path;\r
+ }\r
+\r
+ // for group shares get a list of the group members\r
+ if ( $params['shareType'] == \OCP\Share::SHARE_TYPE_GROUP ) {\r
+ \r
+ $userIds = \OC_Group::usersInGroup($params['shareWith']);\r
+ \r
+ } else {\r
+ \r
+ $userIds = array( $params['shareWith'] );\r
+ \r
+ }\r
+\r
+ // if we unshare a folder we need a list of all (sub-)files\r
+ if ( $params['itemType'] === 'folder' ) {\r
+ \r
+ $allFiles = $util->getAllFiles( $path );\r
+ \r
+ } else {\r
+ \r
+ $allFiles = array( $path );\r
+ }\r
+\r
+ foreach ( $allFiles as $path ) {\r
+\r
+ // check if the user still has access to the file, otherwise delete share key\r
+ $sharingUsers = $util->getSharingUsersArray( true, $path );\r
+\r
+ // Unshare every user who no longer has access to the file\r
+ $delUsers = array_diff( $userIds, $sharingUsers);\r
+ \r
+ if ( !Keymanager::delShareKey( $view, $delUsers, $path ) ) {\r
+ \r
+ $failed[] = $path;\r
+ \r
+ }\r
+\r
+ }\r
+\r
+ // If no attempts to set keyfiles failed\r
+ if ( empty( $failed ) ) {\r
+ \r
+ return true;\r
+ \r
+ } else {\r
+ \r
+ return false;\r
+ \r
+ }\r
+ }\r
+ }\r
\r
/**\r
* @brief \r