summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjörn Schießle <schiessle@owncloud.com>2013-02-13 14:56:39 +0100
committerBjörn Schießle <schiessle@owncloud.com>2013-02-13 14:56:39 +0100
commit4952dfe95657ba52f1b39f958100659539831ba8 (patch)
tree6bde1adb4eb343d64af0d3c919e3a71a4e88dfe2
parenta692264fa416fec44d774bd955a06a65c7c0d158 (diff)
downloadnextcloud-server-4952dfe95657ba52f1b39f958100659539831ba8.tar.gz
nextcloud-server-4952dfe95657ba52f1b39f958100659539831ba8.zip
add post_unshare hook, also add public link shares to the list of user with access to a file
-rw-r--r--apps/files_encryption/appinfo/app.php2
-rw-r--r--apps/files_encryption/hooks/hooks.php9
-rwxr-xr-xapps/files_encryption/lib/crypt.php4
-rw-r--r--lib/public/share.php35
4 files changed, 36 insertions, 14 deletions
diff --git a/apps/files_encryption/appinfo/app.php b/apps/files_encryption/appinfo/app.php
index f83109a18ea..932e8855d07 100644
--- a/apps/files_encryption/appinfo/app.php
+++ b/apps/files_encryption/appinfo/app.php
@@ -16,7 +16,7 @@ OCP\Util::connectHook( 'OC_User', 'pre_setPassword','OCA\Encryption\Hooks', 'set
// Sharing-related hooks
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' );
// Webdav-related hooks
diff --git a/apps/files_encryption/hooks/hooks.php b/apps/files_encryption/hooks/hooks.php
index 5e06948aa50..ae05ba78012 100644
--- a/apps/files_encryption/hooks/hooks.php
+++ b/apps/files_encryption/hooks/hooks.php
@@ -176,6 +176,8 @@ class Hooks {
//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( '/' );
$userId = \OCP\User::getUser();
$util = new Util( $view, $userId );
@@ -191,12 +193,9 @@ class Hooks {
/**
* @brief
*/
- public static function preUnshare( $params ) {
-
+ public static function postUnshare( $params ) {
$path = Util::getFilePath($params['itemSource']);
- $shares = \OCP\Share::getUsersSharingFile( $path, true, false );
- // remove the user from the list from which the file will be unshared
- unset($shares[$params['shareWith']]);
+ $shares = \OCP\Share::getUsersSharingFile( $path, true );
return Crypt::encKeyfileToMultipleUsers(array_unique($shares), $path );
}
diff --git a/apps/files_encryption/lib/crypt.php b/apps/files_encryption/lib/crypt.php
index ba9f0cb9a2a..0f465d7d95a 100755
--- a/apps/files_encryption/lib/crypt.php
+++ b/apps/files_encryption/lib/crypt.php
@@ -450,7 +450,9 @@ class Crypt {
* @returns encrypted file
*/
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;
}
diff --git a/lib/public/share.php b/lib/public/share.php
index 68f5e93baa7..f691ae9b39f 100644
--- a/lib/public/share.php
+++ b/lib/public/share.php
@@ -147,7 +147,6 @@ class Share {
* @brief Find which users can access a shared item
* @param $path to the file
* @param include owner to the list of users with access to the file
- * @param remove duplicates in the result
* @return array
* @note $path needs to be relative to user data dir, e.g. 'file.txt'
* not '/admin/data/file.txt'
@@ -203,6 +202,25 @@ class Share {
$usersInGroup = \OC_Group::usersInGroup($row['share_with']);
$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 ) ) {
@@ -212,11 +230,8 @@ class Share {
}
}
- if ( $removeDuplicates )
- return array_unique($shares);
- else {
- return $shares;
- }
+ return array_unique($shares);
+
}
/**
@@ -475,8 +490,14 @@ class Share {
'itemSource' => $itemSource,
'shareType' => $shareType,
'shareWith' => $shareWith,
- ));
+ ));
self::delete($item['id']);
+ \OC_Hook::emit('OCP\Share', 'post_unshare', array(
+ 'itemType' => $itemType,
+ 'itemSource' => $itemSource,
+ 'shareType' => $shareType,
+ 'shareWith' => $shareWith,
+ ));
return true;
}
return false;