summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/files_encryption/lib/util.php30
-rwxr-xr-xapps/files_encryption/tests/util.php37
2 files changed, 58 insertions, 9 deletions
diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php
index 7cd4b955fea..a2397495dd5 100644
--- a/apps/files_encryption/lib/util.php
+++ b/apps/files_encryption/lib/util.php
@@ -889,6 +889,25 @@ class Util {
}
/**
+ * Returns whether the given user is ready for encryption.
+ * Also returns true if the given user is the public user
+ * or the recovery key user.
+ *
+ * @param string $user user to check
+ *
+ * @return boolean true if the user is ready, false otherwise
+ */
+ private function isUserReady($user) {
+ if ($user === $this->publicShareKeyId
+ || $user === $this->recoveryKeyId
+ ) {
+ return true;
+ }
+ $util = new Util($this->view, $user);
+ return $util->ready();
+ }
+
+ /**
* Filter an array of UIDs to return only ones ready for sharing
* @param array $unfilteredUsers users to be checked for sharing readiness
* @return array as multi-dimensional array. keys: ready, unready
@@ -900,16 +919,9 @@ class Util {
// Loop through users and create array of UIDs that need new keyfiles
foreach ($unfilteredUsers as $user) {
-
- $util = new Util($this->view, $user);
-
// Check that the user is encryption capable, or is the
- // public system user 'ownCloud' (for public shares)
- if (
- $user === $this->publicShareKeyId
- or $user === $this->recoveryKeyId
- or $util->ready()
- ) {
+ // public system user (for public shares)
+ if ($this->isUserReady($user)) {
// Construct array of ready UIDs for Keymanager{}
$readyIds[] = $user;
diff --git a/apps/files_encryption/tests/util.php b/apps/files_encryption/tests/util.php
index 83d2c6b0f92..5651b84afd9 100755
--- a/apps/files_encryption/tests/util.php
+++ b/apps/files_encryption/tests/util.php
@@ -631,6 +631,43 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase {
}
/**
+ * Tests that filterShareReadyUsers() returns the correct list of
+ * users that are ready or not ready for encryption
+ */
+ public function testFilterShareReadyUsers() {
+ $appConfig = \OC::$server->getAppConfig();
+
+ $publicShareKeyId = $appConfig->getValue('files_encryption', 'publicShareKeyId');
+ $recoveryKeyId = $appConfig->getValue('files_encryption', 'recoveryKeyId');
+
+ $usersToTest = array(
+ 'readyUser',
+ 'notReadyUser',
+ 'nonExistingUser',
+ $publicShareKeyId,
+ $recoveryKeyId,
+ );
+ \Test_Encryption_Util::loginHelper('readyUser', true);
+ \Test_Encryption_Util::loginHelper('notReadyUser', true);
+ // delete encryption dir to make it not ready
+ $this->view->unlink('notReadyUser/files_encryption/');
+
+ // login as user1
+ \Test_Encryption_Util::loginHelper(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1);
+
+ $result = $this->util->filterShareReadyUsers($usersToTest);
+ $this->assertEquals(
+ array('readyUser', $publicShareKeyId, $recoveryKeyId),
+ $result['ready']
+ );
+ $this->assertEquals(
+ array('notReadyUser', 'nonExistingUser'),
+ $result['unready']
+ );
+ \OC_User::deleteUser('readyUser');
+ }
+
+ /**
* @param string $user
* @param bool $create
* @param bool $password