From f6efbfcf0bb76e16347748666d0c967ad839c5b2 Mon Sep 17 00:00:00 2001
From: Bjoern Schiessle <schiessle@owncloud.com>
Date: Wed, 29 Oct 2014 12:45:13 +0100
Subject: listen to the post_passwordReset hook, backup the old keys and create
 a new key pair for the user

---
 apps/files_encryption/hooks/hooks.php | 13 +++++++++++++
 apps/files_encryption/lib/helper.php  |  1 +
 apps/files_encryption/lib/util.php    | 12 ++++++++++++
 3 files changed, 26 insertions(+)

(limited to 'apps/files_encryption')

diff --git a/apps/files_encryption/hooks/hooks.php b/apps/files_encryption/hooks/hooks.php
index 3a0a37c0a59..eadd2b64b80 100644
--- a/apps/files_encryption/hooks/hooks.php
+++ b/apps/files_encryption/hooks/hooks.php
@@ -263,6 +263,19 @@ class Hooks {
 		}
 	}
 
+	/**
+	 * after password reset we create a new key pair for the user
+	 *
+	 * @param array $params
+	 */
+	public static function postPasswordReset($params) {
+		$uid = $params['uid'];
+		$password = $params['password'];
+
+		$util = new Util(new \OC\Files\View(), $uid);
+		$util->replaceUserKeys($password);
+	}
+
 	/*
 	 * check if files can be encrypted to every user.
 	 */
diff --git a/apps/files_encryption/lib/helper.php b/apps/files_encryption/lib/helper.php
index 53c380ab2b3..7a50ade82f3 100644
--- a/apps/files_encryption/lib/helper.php
+++ b/apps/files_encryption/lib/helper.php
@@ -70,6 +70,7 @@ class Helper {
 		\OCP\Util::connectHook('OC_Filesystem', 'delete', 'OCA\Encryption\Hooks', 'preDelete');
 		\OCP\Util::connectHook('OC_Filesystem', 'post_umount', 'OCA\Encryption\Hooks', 'postUmount');
 		\OCP\Util::connectHook('OC_Filesystem', 'umount', 'OCA\Encryption\Hooks', 'preUmount');
+		\OCP\Util::connectHook('\OC\Core\LostPassword\Controller\LostController', 'post_passwordReset', 'OCA\Encryption\Hooks', 'postPasswordReset');
 	}
 
 	/**
diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php
index c8697ae7c80..d12b003b227 100644
--- a/apps/files_encryption/lib/util.php
+++ b/apps/files_encryption/lib/util.php
@@ -124,6 +124,18 @@ class Util {
 		}
 	}
 
+	/**
+	 * create a new public/private key pair for the user
+	 *
+	 * @param string $password password for the private key
+	 */
+	public function replaceUserKeys($password) {
+		$this->backupAllKeys('password_reset');
+		$this->view->unlink($this->publicKeyPath);
+		$this->view->unlink($this->privateKeyPath);
+		$this->setupServerSide($password);
+	}
+
 	/**
 	 * Sets up user folders and keys for serverside encryption
 	 *
-- 
cgit v1.2.3