From aa3eb6bb5be9979c31f402201241cf127573541e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= <schiessle@owncloud.com>
Date: Mon, 13 May 2013 17:40:57 +0200
Subject: [PATCH] don't handle public share keys in lib/public/share.php but in
 apps/files_encryption/lib/util.php instead

---
 apps/files_encryption/lib/util.php |  9 ++++++++-
 lib/public/share.php               | 27 ++++++++++++---------------
 2 files changed, 20 insertions(+), 16 deletions(-)

diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php
index 732f5fece8..2a64680599 100644
--- a/apps/files_encryption/lib/util.php
+++ b/apps/files_encryption/lib/util.php
@@ -109,6 +109,7 @@ class Util {
 	private $publicKeyPath; // Path to user's public key
 	private $privateKeyPath; // Path to user's private key
 	private $publicShareKeyId;
+	private $recoveryKeyId;
 
 	public function __construct( \OC_FilesystemView $view, $userId, $client = false ) {
 	
@@ -125,6 +126,7 @@ class Util {
 		$this->publicKeyPath = $this->publicKeyDir . '/' . $this->userId . '.public.key'; // e.g. data/public-keys/admin.public.key
 		$this->privateKeyPath = $this->encryptionDir . '/' . $this->userId . '.private.key'; // e.g. data/admin/admin.private.key
 		$this->publicShareKeyId = \OC_Appconfig::getValue('files_encryption', 'publicShareKeyId');
+		$this->recoveryKeyId = \OC_Appconfig::getValue('files_encryption', 'recoveryKeyId');
 	}
 	
 	public function ready() {
@@ -798,6 +800,7 @@ class Util {
 			// public system user 'ownCloud' (for public shares)
 			if ( 
 				$user == $this->publicShareKeyId
+				or $user == $this->recoveryKeyId
 				or $util->ready() 
 			) {
 			
@@ -949,7 +952,11 @@ class Util {
 		if ( $sharingEnabled ) {
 		
 			// Find out who, if anyone, is sharing the file
-			$userIds = \OCP\Share::getUsersSharingFile( $ownerPath, $owner,true, true, true );
+			$result = \OCP\Share::getUsersSharingFile( $ownerPath, $owner,true, true, true );
+			$userIds = $result['users'];
+			if ( $result['public'] ) {
+				$userIds[] = $this->publicShareKeyId;
+			}
 		
 		}
 		
diff --git a/lib/public/share.php b/lib/public/share.php
index b9cf05bbf7..10400e34c5 100644
--- a/lib/public/share.php
+++ b/lib/public/share.php
@@ -138,6 +138,7 @@ class Share {
 		$path_parts = explode(DIRECTORY_SEPARATOR, trim($path, DIRECTORY_SEPARATOR));
 		$path = '';
 		$shares = array();
+		$publicShare = false;
 		$view = new \OC\Files\View('/' . $user . '/files/');
 		foreach ($path_parts as $p) {
 			$path .= '/' . $p;
@@ -184,27 +185,23 @@ class Share {
 				$shares = array_merge($shares, $usersInGroup);
 			}
 
-			$publicShareKeyId = \OC_Appconfig::getValue('files_encryption', 'publicShareKeyId');
-
-			if ($publicShareKeyId) {
-				//check for public link shares
-				$query = \OC_DB::prepare(
-						'SELECT share_with
+			//check for public link shares
+			$query = \OC_DB::prepare(
+					'SELECT share_with
 					FROM
 					`*PREFIX*share`
 					WHERE
 					item_source = ? AND share_type = ?'
-				);
+			);
 
-				$result = $query->execute(array($source, self::SHARE_TYPE_LINK));
+			$result = $query->execute(array($source, self::SHARE_TYPE_LINK));
 
-				if (\OC_DB::isError($result)) {
-					\OC_Log::write('OCP\Share', \OC_DB::getErrorMessage($result), \OC_Log::ERROR);
-				}
+			if (\OC_DB::isError($result)) {
+				\OC_Log::write('OCP\Share', \OC_DB::getErrorMessage($result), \OC_Log::ERROR);
+			}
 
-				if ($result->fetchRow()) {
-					$shares[] = $publicShareKeyId;
-				}
+			if ($result->fetchRow()) {
+				$publicShare = true;
 			}
 		}
 		// Include owner in list of users, if requested
@@ -212,7 +209,7 @@ class Share {
 			$shares[] = $user;
 		}
 
-		return array_unique($shares);
+		return array("users" => array_unique($shares), "public" => $publicShare);
 	}
 
 	/**
-- 
GitLab