]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix public link share if a user is logged in
authorBjörn Schießle <schiessle@owncloud.com>
Thu, 23 May 2013 18:30:07 +0000 (20:30 +0200)
committerBjörn Schießle <schiessle@owncloud.com>
Thu, 23 May 2013 18:30:07 +0000 (20:30 +0200)
apps/files_encryption/lib/keymanager.php
apps/files_encryption/lib/session.php
apps/files_encryption/lib/util.php

index ddd8f0ad6e26c0b49c5674b407fc0af2b29e7b66..58c1d4b24adf149ded83486160948dd39e189fba 100755 (executable)
@@ -237,10 +237,15 @@ class Keymanager
                }
 
                $util = new Util($view, \OCP\User::getUser());
-               list($owner, $filename) = $util->getUidAndFilename($filePath);
-               $filePath_f = ltrim($filename, '/');
 
-               $keyfilePath = '/' . $owner . '/files_encryption/keyfiles/' . $filePath_f . '.key';
+               if ($util->isPublic()) {
+                       $keyfilePath = $util->getKeyfilePath() . $filePath . '.key';
+               } else {
+                       list($owner, $filename) = $util->getUidAndFilename($filePath);
+                       $filePath_f = ltrim($filename, '/');
+
+                       $keyfilePath = '/' . $owner . '/files_encryption/keyfiles/' . $filePath_f . '.key';
+               }
 
                $proxyStatus = \OC_FileProxy::$enabled;
                \OC_FileProxy::$enabled = false;
@@ -447,9 +452,13 @@ class Keymanager
                //here we need the currently logged in user, while userId can be a different user
                $util = new Util($view, \OCP\User::getUser());
 
-               list($owner, $filename) = $util->getUidAndFilename($filePath);
+               if ($util->isPublic()) {
+                       $shareKeyPath = $util->getSharekeyPath() . $filePath . '.' . $userId . '.shareKey';
+               } else {
+                       list($owner, $filename) = $util->getUidAndFilename($filePath);
+                       $shareKeyPath = \OC\Files\Filesystem::normalizePath('/' . $owner . '/files_encryption/share-keys/' . $filename . '.' . $userId . '.shareKey');
+               }
 
-               $shareKeyPath = \OC\Files\Filesystem::normalizePath('/' . $owner . '/files_encryption/share-keys/' . $filename . '.' . $userId . '.shareKey');
                if ($view->file_exists($shareKeyPath)) {
 
                        $result = $view->file_get_contents($shareKeyPath);
index 8425cedd99f3d6da23452d17f6f440c9b1bde921..86f56e56766f93c62f3eb6e4093b8de9e6fa4fd6 100644 (file)
@@ -84,7 +84,9 @@ class Session
 
                }
 
-               if (\OCP\USER::getUser() === false) {
+               if (\OCP\USER::getUser() === false ||
+                       (isset($_GET['service']) && $_GET['service'] == 'files' &&
+                       isset($_GET['t']))) {
                        // Disable encryption proxy to prevent recursive calls
                        $proxyStatus = \OC_FileProxy::$enabled;
                        \OC_FileProxy::$enabled = false;
index 784d74bd759ca1383c3f3aba81e795bab0536fbf..e327c3403bb17ce80b2c3f71a5bbba44ea0d01e8 100644 (file)
@@ -129,7 +129,9 @@ class Util
                $this->recoveryKeyId = \OC_Appconfig::getValue('files_encryption', 'recoveryKeyId');
 
                // if we are anonymous/public
-               if ($this->userId === false) {
+               if ($this->userId === false ||
+                       (isset($_GET['service']) && $_GET['service'] == 'files' &&
+                       isset($_GET['t']))) {
                        $this->userId = $this->publicShareKeyId;
 
                        // only handle for files_sharing app
@@ -1491,4 +1493,16 @@ class Util
 
                $this->recoverAllFiles('/', $privateKey);
        }
+
+       public function isPublic() {
+               return $this->isPublic;
+       }
+
+       public function getKeyfilePath() {
+               return $this->keyfilesPath;
+       }
+
+       public function getSharekeyPath() {
+               return $this->shareKeysPath;
+       }
 }