From 6f9e425939ff9edb3d0d4c606c38fe9c0416b845 Mon Sep 17 00:00:00 2001 From: Florin Peter Date: Tue, 28 May 2013 09:27:04 +0200 Subject: fix for losing private key while being logged in and accessing a public link --- apps/files_encryption/lib/session.php | 51 ++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 13 deletions(-) (limited to 'apps/files_encryption/lib/session.php') diff --git a/apps/files_encryption/lib/session.php b/apps/files_encryption/lib/session.php index 2ddad0a15da..1551275c63f 100644 --- a/apps/files_encryption/lib/session.php +++ b/apps/files_encryption/lib/session.php @@ -83,17 +83,14 @@ class Session } - if ( \OCP\USER::getUser() === false || - ( isset( $_GET['service'] ) && $_GET['service'] == 'files' && - isset( $_GET['t'] ) ) - ) { + if (\OCA\Encryption\Helper::isPublicAccess()) { // Disable encryption proxy to prevent recursive calls $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; $encryptedKey = $this->view->file_get_contents( '/owncloud_private_key/' . $publicShareKeyId . '.private.key' ); $privateKey = Crypt::symmetricDecryptFileContent( $encryptedKey, '' ); - $this->setPrivateKey( $privateKey ); + $this->setPublicSharePrivateKey( $privateKey ); \OC_FileProxy::$enabled = $proxyStatus; } @@ -103,6 +100,8 @@ class Session * @brief Sets user private key to session * @param string $privateKey * @return bool + * + * @note this should only be set on login */ public function setPrivateKey( $privateKey ) { @@ -113,27 +112,53 @@ class Session } /** - * @brief Gets user private key from session + * @brief Gets user or public share private key from session * @returns string $privateKey The user's plaintext private key * */ public function getPrivateKey() { - if ( - isset( $_SESSION['privateKey'] ) - && !empty( $_SESSION['privateKey'] ) - ) { + // return the public share private key if this is a public access + if (\OCA\Encryption\Helper::isPublicAccess()) { + return $this->getPublicSharePrivateKey(); + } else { + if (isset($_SESSION['privateKey']) && !empty($_SESSION['privateKey'])) { + return $_SESSION['privateKey']; + } else { + return false; + } + } + } + + /** + * @brief Sets public user private key to session + * @param string $privateKey + * @return bool + */ + public function setPublicSharePrivateKey($privateKey) { - return $_SESSION['privateKey']; + $_SESSION['publicSharePrivateKey'] = $privateKey; - } else { + return true; - return false; + } + + /** + * @brief Gets public share private key from session + * @returns string $privateKey + * + */ + public function getPublicSharePrivateKey() { + if (isset($_SESSION['publicSharePrivateKey']) && !empty($_SESSION['publicSharePrivateKey'])) { + return $_SESSION['publicSharePrivateKey']; + } else { + return false; } } + /** * @brief Sets user legacy key to session * @param $legacyKey -- cgit v1.2.3