add post_unshare hook, also add public link shares to the list of user with access to a file
This commit is contained in:
parent
a692264fa4
commit
4952dfe956
4 changed files with 36 additions and 14 deletions
|
@ -16,7 +16,7 @@ OCP\Util::connectHook( 'OC_User', 'pre_setPassword','OCA\Encryption\Hooks', 'set
|
||||||
|
|
||||||
// Sharing-related hooks
|
// Sharing-related hooks
|
||||||
OCP\Util::connectHook( 'OCP\Share', 'post_shared', 'OCA\Encryption\Hooks', 'postShared' );
|
OCP\Util::connectHook( 'OCP\Share', 'post_shared', 'OCA\Encryption\Hooks', 'postShared' );
|
||||||
OCP\Util::connectHook( 'OCP\Share', 'pre_unshare', 'OCA\Encryption\Hooks', 'preUnshare' );
|
OCP\Util::connectHook( 'OCP\Share', 'post_unshare', 'OCA\Encryption\Hooks', 'postUnshare' );
|
||||||
OCP\Util::connectHook( 'OCP\Share', 'pre_unshareAll', 'OCA\Encryption\Hooks', 'preUnshareAll' );
|
OCP\Util::connectHook( 'OCP\Share', 'pre_unshareAll', 'OCA\Encryption\Hooks', 'preUnshareAll' );
|
||||||
|
|
||||||
// Webdav-related hooks
|
// Webdav-related hooks
|
||||||
|
|
|
@ -176,6 +176,8 @@ class Hooks {
|
||||||
|
|
||||||
//TODO: We don't deal with shared folder yet, need to recursively update every file in the folder
|
//TODO: We don't deal with shared folder yet, need to recursively update every file in the folder
|
||||||
|
|
||||||
|
if ($params['shareType'] == \OCP\Share::SHARE_TYPE_LINK)
|
||||||
|
|
||||||
$view = new \OC_FilesystemView( '/' );
|
$view = new \OC_FilesystemView( '/' );
|
||||||
$userId = \OCP\User::getUser();
|
$userId = \OCP\User::getUser();
|
||||||
$util = new Util( $view, $userId );
|
$util = new Util( $view, $userId );
|
||||||
|
@ -191,12 +193,9 @@ class Hooks {
|
||||||
/**
|
/**
|
||||||
* @brief
|
* @brief
|
||||||
*/
|
*/
|
||||||
public static function preUnshare( $params ) {
|
public static function postUnshare( $params ) {
|
||||||
|
|
||||||
$path = Util::getFilePath($params['itemSource']);
|
$path = Util::getFilePath($params['itemSource']);
|
||||||
$shares = \OCP\Share::getUsersSharingFile( $path, true, false );
|
$shares = \OCP\Share::getUsersSharingFile( $path, true );
|
||||||
// remove the user from the list from which the file will be unshared
|
|
||||||
unset($shares[$params['shareWith']]);
|
|
||||||
|
|
||||||
return Crypt::encKeyfileToMultipleUsers(array_unique($shares), $path );
|
return Crypt::encKeyfileToMultipleUsers(array_unique($shares), $path );
|
||||||
}
|
}
|
||||||
|
|
|
@ -450,7 +450,9 @@ class Crypt {
|
||||||
* @returns encrypted file
|
* @returns encrypted file
|
||||||
*/
|
*/
|
||||||
public static function keyEncrypt( $plainContent, $publicKey ) {
|
public static function keyEncrypt( $plainContent, $publicKey ) {
|
||||||
openssl_public_encrypt( $plainContent, $encryptedContent, $publicKey );
|
|
||||||
|
if (openssl_public_encrypt( $plainContent, $encryptedContent, $publicKey )) error_log("feinifeine"); else error_log("ups");
|
||||||
|
|
||||||
return $encryptedContent;
|
return $encryptedContent;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -147,7 +147,6 @@ class Share {
|
||||||
* @brief Find which users can access a shared item
|
* @brief Find which users can access a shared item
|
||||||
* @param $path to the file
|
* @param $path to the file
|
||||||
* @param include owner to the list of users with access to the file
|
* @param include owner to the list of users with access to the file
|
||||||
* @param remove duplicates in the result
|
|
||||||
* @return array
|
* @return array
|
||||||
* @note $path needs to be relative to user data dir, e.g. 'file.txt'
|
* @note $path needs to be relative to user data dir, e.g. 'file.txt'
|
||||||
* not '/admin/data/file.txt'
|
* not '/admin/data/file.txt'
|
||||||
|
@ -203,6 +202,25 @@ class Share {
|
||||||
$usersInGroup = \OC_Group::usersInGroup($row['share_with']);
|
$usersInGroup = \OC_Group::usersInGroup($row['share_with']);
|
||||||
$shares = array_merge($shares, $usersInGroup);
|
$shares = array_merge($shares, $usersInGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//check for public link shares
|
||||||
|
$query = \OC_DB::prepare(
|
||||||
|
'SELECT share_with
|
||||||
|
FROM
|
||||||
|
`*PREFIX*share`
|
||||||
|
WHERE
|
||||||
|
item_source = ? AND share_type = ? AND uid_owner = ?'
|
||||||
|
);
|
||||||
|
|
||||||
|
$result = $query->execute( array( $source, self::SHARE_TYPE_LINK, $user ) );
|
||||||
|
|
||||||
|
if ( \OC_DB::isError( $result ) ) {
|
||||||
|
\OC_Log::write( 'OCP\Share', \OC_DB::getErrorMessage($result), \OC_Log::ERROR );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($result->fetchRow()) {
|
||||||
|
$shares[] = self::SHARE_TYPE_LINK;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ! empty( $shares ) ) {
|
if ( ! empty( $shares ) ) {
|
||||||
|
@ -212,11 +230,8 @@ class Share {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $removeDuplicates )
|
|
||||||
return array_unique($shares);
|
return array_unique($shares);
|
||||||
else {
|
|
||||||
return $shares;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -477,6 +492,12 @@ class Share {
|
||||||
'shareWith' => $shareWith,
|
'shareWith' => $shareWith,
|
||||||
));
|
));
|
||||||
self::delete($item['id']);
|
self::delete($item['id']);
|
||||||
|
\OC_Hook::emit('OCP\Share', 'post_unshare', array(
|
||||||
|
'itemType' => $itemType,
|
||||||
|
'itemSource' => $itemSource,
|
||||||
|
'shareType' => $shareType,
|
||||||
|
'shareWith' => $shareWith,
|
||||||
|
));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in a new issue