From 57c0a7ed693fec6ef487b71a514202b24dd70df2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= <schiessle@owncloud.com>
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 @@
 			</p>
 		<?php endif; ?>
 		<br />
+<!--
 		<p>
 				<label for="encryptAll"><?php p( $l->t( "Scan for unencrypted files and encrypt them" ) ); ?></label>
 				<br />
@@ -59,6 +60,6 @@
 				<div id="encryptAllSuccess"><?php p( $l->t( 'Scan complete' ) );?></div>
 				<div id="encryptAllError"><?php p( $l->t( 'Unable to scan and encrypt files' ) );?></div>
 		</p>
-		
+-->
 	</fieldset>
 </form>
-- 
GitLab