From 54768402b60f70ae13cf14d1acfa3385fd5f6085 Mon Sep 17 00:00:00 2001 From: Florin Peter Date: Tue, 28 May 2013 09:27:04 +0200 Subject: [PATCH] fix for losing private key while being logged in and accessing a public link --- apps/files_encryption/lib/helper.php | 16 +++++++++ apps/files_encryption/lib/session.php | 51 ++++++++++++++++++++------- apps/files_encryption/lib/util.php | 4 +-- 3 files changed, 55 insertions(+), 16 deletions(-) diff --git a/apps/files_encryption/lib/helper.php b/apps/files_encryption/lib/helper.php index 7a2d19eed57..3867a368a9a 100755 --- a/apps/files_encryption/lib/helper.php +++ b/apps/files_encryption/lib/helper.php @@ -173,4 +173,20 @@ class Helper return $return; } + + + /** + * @brief checks if access is public/anonymous user + * @return bool + */ + public static function isPublicAccess() { + if (\OCP\USER::getUser() === false + || (isset($_GET['service']) && $_GET['service'] == 'files' + && isset($_GET['t'])) + ) { + return true; + } else { + return false; + } + } } \ No newline at end of file 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 diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php index 4171b7cae50..dba01c4d961 100644 --- a/apps/files_encryption/lib/util.php +++ b/apps/files_encryption/lib/util.php @@ -127,9 +127,7 @@ class Util { $this->recoveryKeyId = \OC_Appconfig::getValue('files_encryption', 'recoveryKeyId'); // if we are anonymous/public - if ($this->userId === false - || (isset($_GET['service']) && $_GET['service'] == 'files' && isset($_GET['t'])) - ) { + if (\OCA\Encryption\Helper::isPublicAccess()) { $this->userId = $this->publicShareKeyId; // only handle for files_sharing app -- 2.39.5