From 57c0a7ed693fec6ef487b71a514202b24dd70df2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?=
Date: Wed, 15 May 2013 17:56:45 +0200
Subject: [PATCH] add recovery key to all files if the user enabled the feature
and removes them again on disable
---
apps/files_encryption/ajax/userrecovery.php | 6 ++++
apps/files_encryption/lib/util.php | 34 +++++++++++++++++++
.../templates/settings-personal.php | 3 +-
3 files changed, 42 insertions(+), 1 deletion(-)
diff --git a/apps/files_encryption/ajax/userrecovery.php b/apps/files_encryption/ajax/userrecovery.php
index 85a799011d..1f42b376e4 100644
--- a/apps/files_encryption/ajax/userrecovery.php
+++ b/apps/files_encryption/ajax/userrecovery.php
@@ -24,6 +24,12 @@ if (
// Save recovery preference to DB
$return = $util->setRecoveryForUser( $_POST['userEnableRecovery'] );
+
+ if ($_POST['userEnableRecovery'] == "1") {
+ $util->addRecoveryKeys();
+ } else {
+ $util->removeRecoveryKeys();
+ }
} else {
diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php
index 6cb4ccb808..6eee1ada8a 100644
--- a/apps/files_encryption/lib/util.php
+++ b/apps/files_encryption/lib/util.php
@@ -1310,4 +1310,38 @@ class Util {
return $this->recoveryKeyId;
}
+ /**
+ * @brief add recovery key to all encrypted files
+ */
+ public function addRecoveryKeys($path = '/') {
+ $dirContent = $this->view->getDirectoryContent($this->keyfilesPath.$path);
+ foreach ($dirContent as $item) {
+ $filePath = substr($item['path'], 25);
+ if ($item['type'] == 'dir') {
+ $this->addRecoveryKey($filePath.'/');
+ } else {
+ $session = new Session(new \OC_FilesystemView('/'));
+ $sharingEnabled = \OCP\Share::isEnabled();
+ $file = substr($filePath, 0, -4);
+ $usersSharing = $this->getSharingUsersArray($sharingEnabled, $file);
+ $this->setSharedFileKeyfiles( $session, $usersSharing, $file );
+ }
+ }
+ }
+
+ /**
+ * @brief remove recovery key to all encrypted files
+ */
+ public function removeRecoveryKeys($path = '/') {
+ $dirContent = $this->view->getDirectoryContent($this->keyfilesPath.$path);
+ foreach ($dirContent as $item) {
+ $filePath = substr($item['path'], 25);
+ if ($item['type'] == 'dir') {
+ $this->removeRecoveryKeys($filePath.'/');
+ } else {
+ $file = substr($filePath, 0, -4);
+ $this->view->unlink($this->shareKeysPath.'/'.$file.'.'.$this->recoveryKeyId.'.shareKey');
+ }
+ }
+ }
}
diff --git a/apps/files_encryption/templates/settings-personal.php b/apps/files_encryption/templates/settings-personal.php
index 00f567ecb2..33989416d3 100644
--- a/apps/files_encryption/templates/settings-personal.php
+++ b/apps/files_encryption/templates/settings-personal.php
@@ -48,6 +48,7 @@
+