aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/encryption/update.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private/encryption/update.php')
-rw-r--r--lib/private/encryption/update.php111
1 files changed, 111 insertions, 0 deletions
diff --git a/lib/private/encryption/update.php b/lib/private/encryption/update.php
new file mode 100644
index 00000000000..649cf0285a6
--- /dev/null
+++ b/lib/private/encryption/update.php
@@ -0,0 +1,111 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @copyright (C) 2015 ownCloud, Inc.
+ *
+ * @author Bjoern Schiessle <schiessle@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+namespace OC\Encryption;
+
+use \OC\Files\Mount;
+use \OC\Files\View;
+
+/**
+ * update encrypted files, e.g. because a file was shared
+ */
+class Update {
+
+ /** @var \OC\Files\View */
+ protected $view;
+
+ /** @var \OC\Encryption\Util */
+ protected $util;
+
+ /** @var \OC\Files\Mount\Manager */
+ protected $mountManager;
+
+ /** @var \OC\Encryption\Manager */
+ protected $encryptionManager;
+
+ /** @var string */
+ protected $uid;
+
+ /**
+ *
+ * @param \OC\Files\View $view
+ * @param \OC\Encryption\Util $util
+ * @param \OC\Files\Mount\Manager $mountManager
+ * @param \OC\Encryption\Manager $encryptionManager
+ * @param string $uid
+ */
+ public function __construct(
+ View $view,
+ Util $util,
+ Mount\Manager $mountManager,
+ Manager $encryptionManager,
+ $uid
+ ) {
+
+ $this->view = $view;
+ $this->util = $util;
+ $this->mountManager = $mountManager;
+ $this->encryptionManager = $encryptionManager;
+ $this->uid = $uid;
+ }
+
+ public function postShared($params) {
+ if ($params['itemType'] === 'file' || $params['itemType'] === 'folder') {
+ $this->update($params['fileSource']);
+ }
+ }
+
+ public function postUnshared($params) {
+ if ($params['itemType'] === 'file' || $params['itemType'] === 'folder') {
+ $this->update($params['fileSource']);
+ }
+ }
+
+ /**
+ * update keyfiles and share keys recursively
+ *
+ * @param int $fileSource file source id
+ */
+ private function update($fileSource) {
+ $path = \OC\Files\Filesystem::getPath($fileSource);
+ $absPath = '/' . $this->uid . '/files' . $path;
+
+ $mount = $this->mountManager->find($path);
+ $mountPoint = $mount->getMountPoint();
+
+ // if a folder was shared, get a list of all (sub-)folders
+ if ($this->view->is_dir($absPath)) {
+ $allFiles = $this->util->getAllFiles($absPath, $mountPoint);
+ } else {
+ $allFiles = array($absPath);
+ }
+
+ $encryptionModule = $this->encryptionManager->getDefaultEncryptionModule();
+
+ foreach ($allFiles as $path) {
+ $usersSharing = $this->util->getSharingUsersArray($path);
+ $encryptionModule->update($absPath, $usersSharing);
+ }
+ }
+
+} \ No newline at end of file