summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorBjoern Schiessle <bjoern@schiessle.org>2017-05-30 11:59:49 +0200
committerBjoern Schiessle <bjoern@schiessle.org>2017-07-06 11:33:08 +0200
commitda51ec38f4174532e83a4fde21f4c523e4f0bc7c (patch)
tree3939c7805a222e0e180a8999b47632a5e76674fb /lib
parent9c5ba2f12cf8f3a7b3587fd8ef304aed86e703e1 (diff)
downloadnextcloud-server-da51ec38f4174532e83a4fde21f4c523e4f0bc7c.tar.gz
nextcloud-server-da51ec38f4174532e83a4fde21f4c523e4f0bc7c.zip
only collect detailed access list if it is really needed
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/private/Encryption/Update.php10
-rw-r--r--lib/private/Files/Stream/Encryption.php5
-rw-r--r--lib/public/Encryption/IEncryptionModule.php10
3 files changed, 23 insertions, 2 deletions
diff --git a/lib/private/Encryption/Update.php b/lib/private/Encryption/Update.php
index ad40183767b..94d64b73504 100644
--- a/lib/private/Encryption/Update.php
+++ b/lib/private/Encryption/Update.php
@@ -168,6 +168,14 @@ class Update {
*/
public function update($path) {
+ $encryptionModule = $this->encryptionManager->getEncryptionModule();
+
+ // if the encryption module doesn't encrypt the files on a per-user basis
+ // we have nothing to do here.
+ if ($encryptionModule->needDetailedAccessList() === false) {
+ return;
+ }
+
// if a folder was shared, get a list of all (sub-)folders
if ($this->view->is_dir($path)) {
$allFiles = $this->util->getAllFiles($path);
@@ -175,7 +183,7 @@ class Update {
$allFiles = array($path);
}
- $encryptionModule = $this->encryptionManager->getEncryptionModule();
+
foreach ($allFiles as $file) {
$usersSharing = $this->file->getAccessList($file);
diff --git a/lib/private/Files/Stream/Encryption.php b/lib/private/Files/Stream/Encryption.php
index d1f68696848..b68917ce76e 100644
--- a/lib/private/Files/Stream/Encryption.php
+++ b/lib/private/Files/Stream/Encryption.php
@@ -254,7 +254,10 @@ class Encryption extends Wrapper {
$sharePath = dirname($sharePath);
}
- $accessList = $this->file->getAccessList($sharePath);
+ $accessList = [];
+ if ($this->encryptionModule->needDetailedAccessList()) {
+ $accessList = $this->file->getAccessList($sharePath);
+ }
$this->newHeader = $this->encryptionModule->begin($this->fullPath, $this->uid, $mode, $this->header, $accessList);
if (
diff --git a/lib/public/Encryption/IEncryptionModule.php b/lib/public/Encryption/IEncryptionModule.php
index 6be9763c9c8..d96c6c8ba06 100644
--- a/lib/public/Encryption/IEncryptionModule.php
+++ b/lib/public/Encryption/IEncryptionModule.php
@@ -182,4 +182,14 @@ interface IEncryptionModule {
*/
public function isReadyForUser($user);
+ /**
+ * Does the encryption module needs a detailed list of users with access to the file?
+ * For example if the encryption module uses per-user encryption keys and needs to know
+ * the users with access to the file to encrypt/decrypt it.
+ *
+ * @since 13.0.0
+ * @return bool
+ */
+ public function needDetailedAccessList();
+
}