summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2015-03-30 13:23:10 +0200
committerThomas Müller <thomas.mueller@tmit.eu>2015-04-07 13:30:28 +0200
commita905f641b3e619838c945caa29a1604f5b3ab8ba (patch)
tree1c7e853b87b6fde1fc14f16a38cdf12a89f51d18
parent3e6eb28ee39d366bccfb8a1c96839f4b05c9da6e (diff)
downloadnextcloud-server-a905f641b3e619838c945caa29a1604f5b3ab8ba.tar.gz
nextcloud-server-a905f641b3e619838c945caa29a1604f5b3ab8ba.zip
various fixes & start to unit test the encryption storage wrapper
-rw-r--r--apps/encryption_dummy/lib/dummymodule.php28
-rw-r--r--lib/private/encryption/exceptions/encryptionheaderkeyexistsexception.php6
-rw-r--r--lib/private/encryption/util.php33
-rw-r--r--lib/private/files/storage/wrapper/encryption.php6
-rw-r--r--tests/lib/files/storage/wrapper/encryption.php50
-rw-r--r--tests/lib/files/storage/wrapper/jail.php4
6 files changed, 91 insertions, 36 deletions
diff --git a/apps/encryption_dummy/lib/dummymodule.php b/apps/encryption_dummy/lib/dummymodule.php
index 8ca9cd4f9af..55e8f26af95 100644
--- a/apps/encryption_dummy/lib/dummymodule.php
+++ b/apps/encryption_dummy/lib/dummymodule.php
@@ -23,7 +23,9 @@
namespace OCA\Encryption_Dummy;
-class DummyModule implements \OCP\Encryption\IEncryptionModule {
+use OCP\Encryption\IEncryptionModule;
+
+class DummyModule implements IEncryptionModule {
/** @var boolean */
protected $isWriteOperation;
@@ -104,17 +106,6 @@ class DummyModule implements \OCP\Encryption\IEncryptionModule {
}
/**
- * update encrypted file, e.g. give additional users access to the file
- *
- * @param string $path path to the file which should be updated
- * @param array $accessList who has access to the file contains the key 'users' and 'public'
- * @return boolean
- */
- public function update($path, $accessList) {
- return true;
- }
-
- /**
* should the file be encrypted or not
*
* @param string $path
@@ -142,4 +133,15 @@ class DummyModule implements \OCP\Encryption\IEncryptionModule {
return 6126;
}
-} \ No newline at end of file
+ /**
+ * update encrypted file, e.g. give additional users access to the file
+ *
+ * @param string $path path to the file which should be updated
+ * @param string $uid of the user who performs the operation
+ * @param array $accessList who has access to the file contains the key 'users' and 'public'
+ * @return boolean
+ */
+ public function update($path, $uid, $accessList) {
+ return true;
+ }
+}
diff --git a/lib/private/encryption/exceptions/encryptionheaderkeyexistsexception.php b/lib/private/encryption/exceptions/encryptionheaderkeyexistsexception.php
index d401f0323ba..23103b90c4f 100644
--- a/lib/private/encryption/exceptions/encryptionheaderkeyexistsexception.php
+++ b/lib/private/encryption/exceptions/encryptionheaderkeyexistsexception.php
@@ -26,4 +26,8 @@ namespace OC\Encryption\Exceptions;
class EncryptionHeaderKeyExistsException extends \Exception {
-} \ No newline at end of file
+}
+
+class EncryptionHeaderToLargeException extends \Exception {
+
+}
diff --git a/lib/private/encryption/util.php b/lib/private/encryption/util.php
index d983c92781c..1308d27c924 100644
--- a/lib/private/encryption/util.php
+++ b/lib/private/encryption/util.php
@@ -23,8 +23,9 @@
namespace OC\Encryption;
-use OC\Encryption\Exceptions\EncryptionHeaderToLargeException;
use OC\Encryption\Exceptions\EncryptionHeaderKeyExistsException;
+use OC\Encryption\Exceptions\EncryptionHeaderToLargeException;
+use OC\Files\View;
use OCP\Encryption\IEncryptionModule;
use OCP\IConfig;
@@ -50,13 +51,13 @@ class Util {
*/
protected $blockSize = 8192;
- /** @var \OC\Files\View */
+ /** @var View */
protected $view;
/** @var array */
protected $ocHeaderKeys;
- /** @var \OC\User\Manager */
+ /** @var Manager */
protected $userManager;
/** @var IConfig */
@@ -93,7 +94,7 @@ class Util {
* @param array $header
* @return string
*/
- public function getEncryptionModuleId(array $header) {
+ public function getEncryptionModuleId(array $header = null) {
$id = '';
$encryptionModuleKey = self::HEADER_ENCRYPTION_MODULE_KEY;
@@ -153,7 +154,7 @@ class Util {
$header .= self::HEADER_END;
if (strlen($header) > $this->getHeaderSize()) {
- throw new EncryptionHeaderToLargeException('max header size exceeded', EncryptionException::ENCRYPTION_HEADER_TO_LARGE);
+ throw new EncryptionHeaderToLargeException('max header size exceeded');
}
$paddedHeader = str_pad($header, $this->headerSize, self::HEADER_PADDING_CHAR, STR_PAD_RIGHT);
@@ -208,7 +209,7 @@ class Util {
* go recursively through a dir and collect all files and sub files.
*
* @param string $dir relative to the users files folder
- * @param strinf $mountPoint
+ * @param string $mountPoint
* @return array with list of files relative to the users files folder
*/
public function getAllFiles($dir, $mountPoint = '') {
@@ -285,19 +286,19 @@ class Util {
throw new \BadMethodCallException('path needs to be relative to the system wide data folder and point to a user specific file');
}
- $pathinfo = pathinfo($path);
- $partfile = false;
+ $pathInfo = pathinfo($path);
+ $partFile = false;
$parentFolder = false;
- if (array_key_exists('extension', $pathinfo) && $pathinfo['extension'] === 'part') {
+ if (array_key_exists('extension', $pathInfo) && $pathInfo['extension'] === 'part') {
// if the real file exists we check this file
- $filePath = $pathinfo['dirname'] . '/' . $pathinfo['filename'];
+ $filePath = $pathInfo['dirname'] . '/' . $pathInfo['filename'];
if ($this->view->file_exists($filePath)) {
- $pathToCheck = $pathinfo['dirname'] . '/' . $pathinfo['filename'];
+ $pathToCheck = $pathInfo['dirname'] . '/' . $pathInfo['filename'];
} else { // otherwise we look for the parent
- $pathToCheck = $pathinfo['dirname'];
+ $pathToCheck = $pathInfo['dirname'];
$parentFolder = true;
}
- $partfile = true;
+ $partFile = true;
} else {
$pathToCheck = $path;
}
@@ -320,11 +321,11 @@ class Util {
$this->view->chroot('/');
if ($parentFolder) {
- $ownerPath = $ownerPath . '/'. $pathinfo['filename'];
+ $ownerPath = $ownerPath . '/'. $pathInfo['filename'];
}
- if ($partfile) {
- $ownerPath = $ownerPath . '.' . $pathinfo['extension'];
+ if ($partFile) {
+ $ownerPath = $ownerPath . '.' . $pathInfo['extension'];
}
return array(
diff --git a/lib/private/files/storage/wrapper/encryption.php b/lib/private/files/storage/wrapper/encryption.php
index 0e70c99c8d7..a9e65a00147 100644
--- a/lib/private/files/storage/wrapper/encryption.php
+++ b/lib/private/files/storage/wrapper/encryption.php
@@ -295,7 +295,9 @@ class Encryption extends Wrapper {
* read encryption module needed to read/write the file located at $path
*
* @param string $path
- * @return \OCP\Encryption\IEncryptionModule|null
+ * @return null|\OCP\Encryption\IEncryptionModule
+ * @throws ModuleDoesNotExistsException
+ * @throws \Exception
*/
protected function getEncryptionModule($path) {
$encryptionModule = null;
@@ -305,7 +307,7 @@ class Encryption extends Wrapper {
try {
$encryptionModule = $this->encryptionManager->getEncryptionModule($encryptionModuleId);
} catch (ModuleDoesNotExistsException $e) {
- $this->logger->critical('Encryption module defined in "' . $path . '" mot loaded!');
+ $this->logger->critical('Encryption module defined in "' . $path . '" not loaded!');
throw $e;
}
}
diff --git a/tests/lib/files/storage/wrapper/encryption.php b/tests/lib/files/storage/wrapper/encryption.php
new file mode 100644
index 00000000000..b8d4e962c54
--- /dev/null
+++ b/tests/lib/files/storage/wrapper/encryption.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace Test\Files\Storage\Wrapper;
+
+use OC\Files\View;
+use OCA\Encryption_Dummy\DummyModule;
+
+class Encryption extends \Test\Files\Storage\Storage {
+
+ /**
+ * @var \OC\Files\Storage\Temporary
+ */
+ private $sourceStorage;
+
+ public function setUp() {
+
+ parent::setUp();
+
+ $encryptionManager = $this->getMockBuilder('\OC\Encryption\Manager')
+ ->disableOriginalConstructor()
+ ->setMethods(['getDefaultEncryptionModule', 'getEncryptionModule'])
+ ->getMock();
+ $encryptionManager->expects($this->any())
+ ->method('getDefaultEncryptionModule')
+ ->willReturn(new DummyModule());
+
+ $util = new \OC\Encryption\Util(new View(), new \OC\User\Manager());
+
+ $logger = $this->getMock('\OC\Log');
+
+ $this->sourceStorage = new \OC\Files\Storage\Temporary(array());
+ $this->instance = new \OC\Files\Storage\Wrapper\Encryption([
+ 'storage' => $this->sourceStorage,
+ 'root' => 'foo',
+ 'mountPoint' => '/'
+ ],
+ $encryptionManager, $util, $logger
+ );
+ }
+
+// public function testMkDirRooted() {
+// $this->instance->mkdir('bar');
+// $this->assertTrue($this->sourceStorage->is_dir('foo/bar'));
+// }
+//
+// public function testFilePutContentsRooted() {
+// $this->instance->file_put_contents('bar', 'asd');
+// $this->assertEquals('asd', $this->sourceStorage->file_get_contents('foo/bar'));
+// }
+}
diff --git a/tests/lib/files/storage/wrapper/jail.php b/tests/lib/files/storage/wrapper/jail.php
index 270ce750ecf..a7bd684df44 100644
--- a/tests/lib/files/storage/wrapper/jail.php
+++ b/tests/lib/files/storage/wrapper/jail.php
@@ -9,10 +9,6 @@
namespace Test\Files\Storage\Wrapper;
class Jail extends \Test\Files\Storage\Storage {
- /**
- * @var string tmpDir
- */
- private $tmpDir;
/**
* @var \OC\Files\Storage\Temporary