various fixes & start to unit test the encryption storage wrapper
This commit is contained in:
parent
3e6eb28ee3
commit
a905f641b3
|
@ -23,7 +23,9 @@
|
||||||
|
|
||||||
namespace OCA\Encryption_Dummy;
|
namespace OCA\Encryption_Dummy;
|
||||||
|
|
||||||
class DummyModule implements \OCP\Encryption\IEncryptionModule {
|
use OCP\Encryption\IEncryptionModule;
|
||||||
|
|
||||||
|
class DummyModule implements IEncryptionModule {
|
||||||
|
|
||||||
/** @var boolean */
|
/** @var boolean */
|
||||||
protected $isWriteOperation;
|
protected $isWriteOperation;
|
||||||
|
@ -103,17 +105,6 @@ class DummyModule implements \OCP\Encryption\IEncryptionModule {
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 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
|
* should the file be encrypted or not
|
||||||
*
|
*
|
||||||
|
@ -142,4 +133,15 @@ class DummyModule implements \OCP\Encryption\IEncryptionModule {
|
||||||
return 6126;
|
return 6126;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
/**
|
||||||
|
* 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -26,4 +26,8 @@ namespace OC\Encryption\Exceptions;
|
||||||
|
|
||||||
class EncryptionHeaderKeyExistsException extends \Exception {
|
class EncryptionHeaderKeyExistsException extends \Exception {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class EncryptionHeaderToLargeException extends \Exception {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -23,8 +23,9 @@
|
||||||
|
|
||||||
namespace OC\Encryption;
|
namespace OC\Encryption;
|
||||||
|
|
||||||
use OC\Encryption\Exceptions\EncryptionHeaderToLargeException;
|
|
||||||
use OC\Encryption\Exceptions\EncryptionHeaderKeyExistsException;
|
use OC\Encryption\Exceptions\EncryptionHeaderKeyExistsException;
|
||||||
|
use OC\Encryption\Exceptions\EncryptionHeaderToLargeException;
|
||||||
|
use OC\Files\View;
|
||||||
use OCP\Encryption\IEncryptionModule;
|
use OCP\Encryption\IEncryptionModule;
|
||||||
use OCP\IConfig;
|
use OCP\IConfig;
|
||||||
|
|
||||||
|
@ -50,13 +51,13 @@ class Util {
|
||||||
*/
|
*/
|
||||||
protected $blockSize = 8192;
|
protected $blockSize = 8192;
|
||||||
|
|
||||||
/** @var \OC\Files\View */
|
/** @var View */
|
||||||
protected $view;
|
protected $view;
|
||||||
|
|
||||||
/** @var array */
|
/** @var array */
|
||||||
protected $ocHeaderKeys;
|
protected $ocHeaderKeys;
|
||||||
|
|
||||||
/** @var \OC\User\Manager */
|
/** @var Manager */
|
||||||
protected $userManager;
|
protected $userManager;
|
||||||
|
|
||||||
/** @var IConfig */
|
/** @var IConfig */
|
||||||
|
@ -93,7 +94,7 @@ class Util {
|
||||||
* @param array $header
|
* @param array $header
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getEncryptionModuleId(array $header) {
|
public function getEncryptionModuleId(array $header = null) {
|
||||||
$id = '';
|
$id = '';
|
||||||
$encryptionModuleKey = self::HEADER_ENCRYPTION_MODULE_KEY;
|
$encryptionModuleKey = self::HEADER_ENCRYPTION_MODULE_KEY;
|
||||||
|
|
||||||
|
@ -153,7 +154,7 @@ class Util {
|
||||||
$header .= self::HEADER_END;
|
$header .= self::HEADER_END;
|
||||||
|
|
||||||
if (strlen($header) > $this->getHeaderSize()) {
|
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);
|
$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.
|
* go recursively through a dir and collect all files and sub files.
|
||||||
*
|
*
|
||||||
* @param string $dir relative to the users files folder
|
* @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
|
* @return array with list of files relative to the users files folder
|
||||||
*/
|
*/
|
||||||
public function getAllFiles($dir, $mountPoint = '') {
|
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');
|
throw new \BadMethodCallException('path needs to be relative to the system wide data folder and point to a user specific file');
|
||||||
}
|
}
|
||||||
|
|
||||||
$pathinfo = pathinfo($path);
|
$pathInfo = pathinfo($path);
|
||||||
$partfile = false;
|
$partFile = false;
|
||||||
$parentFolder = 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
|
// 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)) {
|
if ($this->view->file_exists($filePath)) {
|
||||||
$pathToCheck = $pathinfo['dirname'] . '/' . $pathinfo['filename'];
|
$pathToCheck = $pathInfo['dirname'] . '/' . $pathInfo['filename'];
|
||||||
} else { // otherwise we look for the parent
|
} else { // otherwise we look for the parent
|
||||||
$pathToCheck = $pathinfo['dirname'];
|
$pathToCheck = $pathInfo['dirname'];
|
||||||
$parentFolder = true;
|
$parentFolder = true;
|
||||||
}
|
}
|
||||||
$partfile = true;
|
$partFile = true;
|
||||||
} else {
|
} else {
|
||||||
$pathToCheck = $path;
|
$pathToCheck = $path;
|
||||||
}
|
}
|
||||||
|
@ -320,11 +321,11 @@ class Util {
|
||||||
$this->view->chroot('/');
|
$this->view->chroot('/');
|
||||||
|
|
||||||
if ($parentFolder) {
|
if ($parentFolder) {
|
||||||
$ownerPath = $ownerPath . '/'. $pathinfo['filename'];
|
$ownerPath = $ownerPath . '/'. $pathInfo['filename'];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($partfile) {
|
if ($partFile) {
|
||||||
$ownerPath = $ownerPath . '.' . $pathinfo['extension'];
|
$ownerPath = $ownerPath . '.' . $pathInfo['extension'];
|
||||||
}
|
}
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
|
|
|
@ -295,7 +295,9 @@ class Encryption extends Wrapper {
|
||||||
* read encryption module needed to read/write the file located at $path
|
* read encryption module needed to read/write the file located at $path
|
||||||
*
|
*
|
||||||
* @param string $path
|
* @param string $path
|
||||||
* @return \OCP\Encryption\IEncryptionModule|null
|
* @return null|\OCP\Encryption\IEncryptionModule
|
||||||
|
* @throws ModuleDoesNotExistsException
|
||||||
|
* @throws \Exception
|
||||||
*/
|
*/
|
||||||
protected function getEncryptionModule($path) {
|
protected function getEncryptionModule($path) {
|
||||||
$encryptionModule = null;
|
$encryptionModule = null;
|
||||||
|
@ -305,7 +307,7 @@ class Encryption extends Wrapper {
|
||||||
try {
|
try {
|
||||||
$encryptionModule = $this->encryptionManager->getEncryptionModule($encryptionModuleId);
|
$encryptionModule = $this->encryptionManager->getEncryptionModule($encryptionModuleId);
|
||||||
} catch (ModuleDoesNotExistsException $e) {
|
} 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;
|
throw $e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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'));
|
||||||
|
// }
|
||||||
|
}
|
|
@ -9,10 +9,6 @@
|
||||||
namespace Test\Files\Storage\Wrapper;
|
namespace Test\Files\Storage\Wrapper;
|
||||||
|
|
||||||
class Jail extends \Test\Files\Storage\Storage {
|
class Jail extends \Test\Files\Storage\Storage {
|
||||||
/**
|
|
||||||
* @var string tmpDir
|
|
||||||
*/
|
|
||||||
private $tmpDir;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var \OC\Files\Storage\Temporary
|
* @var \OC\Files\Storage\Temporary
|
||||||
|
|
Loading…
Reference in New Issue