]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix versions download and previews
authorBjoern Schiessle <schiessle@owncloud.com>
Thu, 2 Apr 2015 13:29:10 +0000 (15:29 +0200)
committerThomas Müller <thomas.mueller@tmit.eu>
Tue, 7 Apr 2015 11:30:31 +0000 (13:30 +0200)
apps/encryption/lib/crypto/encryption.php
apps/encryption/tests/lib/crypto/encryptionTest.php [new file with mode: 0644]

index b66be26370f3922563d0659366ea0ea4acb9617c..7c633b7411fbaace38c056c9db906811acc046a0 100644 (file)
@@ -100,13 +100,13 @@ class Encryption implements IEncryptionModule {
                        $this->cipher = $this->crypt->getCipher();
                }
 
-               $this->path = $path;
+               $this->path = $this->getPathToRealFile($path);
                $this->accessList = $accessList;
                $this->user = $user;
                $this->writeCache = '';
                $this->isWriteOperation = false;
 
-               $this->fileKey = $this->keyManager->getFileKey($path, $this->user);
+               $this->fileKey = $this->keyManager->getFileKey($this->path, $this->user);
 
                return array('cipher' => $this->cipher);
        }
@@ -135,7 +135,7 @@ class Encryption implements IEncryptionModule {
                        $publicKeys = $this->keyManager->addSystemKeys($this->accessList, $publicKeys);
 
                        $encryptedKeyfiles = $this->crypt->multiKeyEncrypt($this->fileKey, $publicKeys);
-                       $this->keyManager->setAllFileKeys($path, $encryptedKeyfiles);
+                       $this->keyManager->setAllFileKeys($this->path, $encryptedKeyfiles);
                }
                return $result;
        }
@@ -313,4 +313,16 @@ class Encryption implements IEncryptionModule {
        public function getUnencryptedBlockSize() {
                return 6126;
        }
+
+       protected function getPathToRealFile($path) {
+               $realPath = $path;
+               $parts = explode('/', $path);
+               if ($parts[2] === 'files_versions') {
+                       $realPath = '/' . $parts[1] . '/files/' . implode('/', array_slice($parts, 3));
+                       $length = strrpos($realPath, '.');
+                       $realPath = substr($realPath, 0, $length);
+               }
+
+               return $realPath;
+       }
 }
diff --git a/apps/encryption/tests/lib/crypto/encryptionTest.php b/apps/encryption/tests/lib/crypto/encryptionTest.php
new file mode 100644 (file)
index 0000000..7f3a16a
--- /dev/null
@@ -0,0 +1,79 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @copyright (C) 2015 ownCloud, Inc.
+ *
+ * @author Bjoern Schiessle <schiessle@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+namespace OCA\Encryption\Tests\Crypto;
+
+use Test\TestCase;
+use OCA\Encryption\Crypto\Encryption;
+
+class EncryptionTest extends TestCase {
+
+       /** @var Encryption */
+       private $instance;
+
+       /** @var \PHPUnit_Framework_MockObject_MockObject */
+       private $keyManagerMock;
+
+       /** @var \PHPUnit_Framework_MockObject_MockObject */
+       private $cryptMock;
+
+       /** @var \PHPUnit_Framework_MockObject_MockObject */
+       private $utilMock;
+
+       public function setUp() {
+               parent::setUp();
+
+               $this->cryptMock = $this->getMockBuilder('OCA\Encryption\Crypto\Crypt')
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $this->utilMock = $this->getMockBuilder('OCA\Encryption\Util')
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $this->keyManagerMock = $this->getMockBuilder('OCA\Encryption\KeyManager')
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
+               $this->instance = new Encryption($this->cryptMock, $this->keyManagerMock, $this->utilMock);
+       }
+
+       /**
+        * @dataProvider dataProviderForTestGetPathToRealFile
+        */
+       public function testGetPathToRealFile($path, $expected) {
+               $result = \Test_Helper::invokePrivate($this->instance, 'getPathToRealFile', array($path));
+               $this->assertSame($expected,
+                       \Test_Helper::invokePrivate($this->instance, 'getPathToRealFile', array($path))
+               );
+       }
+
+       public function dataProviderForTestGetPathToRealFile() {
+               return array(
+                       array('/user/files/foo/bar.txt', '/user/files/foo/bar.txt'),
+                       array('/user/files/foo.txt', '/user/files/foo.txt'),
+                       array('/user/files_versions/foo.txt.v543534', '/user/files/foo.txt'),
+                       array('/user/files_versions/foo/bar.txt.v5454', '/user/files/foo/bar.txt'),
+               );
+       }
+
+
+}
\ No newline at end of file