|
|
|
@ -1,220 +1,110 @@ |
|
|
|
|
<?php |
|
|
|
|
/** |
|
|
|
|
* Copyright (c) 2012 Sam Tuke <samtuke@owncloud.com>, |
|
|
|
|
* and Robin Appelman <icewind@owncloud.com> |
|
|
|
|
* This file is licensed under the Affero General Public License version 3 or |
|
|
|
|
* later. |
|
|
|
|
* See the COPYING-README file. |
|
|
|
|
* ownCloud |
|
|
|
|
* |
|
|
|
|
* @author Bjoern Schiessle |
|
|
|
|
* @copyright 2013 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/>. |
|
|
|
|
* |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
// require_once "PHPUnit/Framework/TestCase.php"; |
|
|
|
|
// require_once realpath( dirname(__FILE__).'/../../../lib/base.php' ); |
|
|
|
|
// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery.php' ); |
|
|
|
|
// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/Generator.php' ); |
|
|
|
|
// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/MockInterface.php' ); |
|
|
|
|
// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/Mock.php' ); |
|
|
|
|
// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/Container.php' ); |
|
|
|
|
// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/Configuration.php' ); |
|
|
|
|
// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/CompositeExpectation.php' ); |
|
|
|
|
// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/ExpectationDirector.php' ); |
|
|
|
|
// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/Expectation.php' ); |
|
|
|
|
// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/Exception.php' ); |
|
|
|
|
// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/CountValidator/CountValidatorAbstract.php' ); |
|
|
|
|
// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/CountValidator/Exception.php' ); |
|
|
|
|
// require_once realpath( dirname(__FILE__).'/../../../3rdparty/mockery/Mockery/CountValidator/Exact.php' ); |
|
|
|
|
// |
|
|
|
|
// use \Mockery as m; |
|
|
|
|
// use OCA\Encryption; |
|
|
|
|
|
|
|
|
|
// class Test_Util extends \PHPUnit_Framework_TestCase { |
|
|
|
|
// |
|
|
|
|
// public function setUp() { |
|
|
|
|
// |
|
|
|
|
// $this->proxy = new Encryption\Proxy(); |
|
|
|
|
// |
|
|
|
|
// $this->tmpFileName = "tmpFile-".time(); |
|
|
|
|
// |
|
|
|
|
// $this->privateKey = file_get_contents( realpath( dirname(__FILE__).'/data/admin.public.key' ) ); |
|
|
|
|
// $this->publicKey = file_get_contents( realpath( dirname(__FILE__).'/data/admin.private.key' ) ); |
|
|
|
|
// $this->encDataShort = file_get_contents( realpath( dirname(__FILE__).'/data/yoga-manchester-enc' ) ); |
|
|
|
|
// $this->encDataShortKey = file_get_contents( realpath( dirname(__FILE__).'/data/yoga-manchester.key' ) ); |
|
|
|
|
// |
|
|
|
|
// $this->dataShort = file_get_contents( realpath( dirname(__FILE__).'/data/yoga-manchester' ) ); |
|
|
|
|
// $this->dataLong = file_get_contents( realpath( dirname(__FILE__).'/../lib/crypt.php' ) ); |
|
|
|
|
// $this->longDataPath = realpath( dirname(__FILE__).'/../lib/crypt.php' ); |
|
|
|
|
// |
|
|
|
|
// $this->data1 = file_get_contents( realpath( dirname(__FILE__).'/../../../data/admin/files/enc-test.txt' ) ); |
|
|
|
|
// |
|
|
|
|
// \OC_FileProxy::$enabled = false; |
|
|
|
|
// $this->Encdata1 = file_get_contents( realpath( dirname(__FILE__).'/../../../data/admin/files/enc-test.txt' ) ); |
|
|
|
|
// \OC_FileProxy::$enabled = true; |
|
|
|
|
// |
|
|
|
|
// $this->userId = 'admin'; |
|
|
|
|
// $this->pass = 'admin'; |
|
|
|
|
// |
|
|
|
|
// $this->session = new Encryption\Session( $view ); // FIXME: Provide a $view object for use here |
|
|
|
|
// |
|
|
|
|
// $this->session->setPrivateKey( |
|
|
|
|
// '-----BEGIN PRIVATE KEY----- |
|
|
|
|
// MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDiH3EA4EpFA7Fx |
|
|
|
|
// s2dyyfL5jwXeYXrTqQJ6DqKgGn8VsbT3eu8R9KzM2XitVwZe8c8L52DvJ06o5vg0 |
|
|
|
|
// GqPYxilFdOFJe/ggac5Tq8UmJiZS4EqYEMwxBIfIyWTxeGV06/0HOwnVAkqHMcBz |
|
|
|
|
// 64qldtgi5O8kZMEM2/gKBgU0kMLJzM+8oEWhL1+gsUWQhxd8cKLXypS6iWgqFJrz |
|
|
|
|
// f/X0hJsJR+gyYxNpahtnjzd/LxLAETrOMsl2tue+BAxmjbAM0aG0NEM0div+b59s |
|
|
|
|
// 2uz/iWbxImp5pOdYVKcVW89D4XBMyGegR40trV2VwiuX1blKCfdjMsJhiaL9pymp |
|
|
|
|
// ug1wzyQFAgMBAAECggEAK6c+PZkPPXuVCgpEcliiW6NM0r2m5K3AGKgypQ34csu3 |
|
|
|
|
// z/8foCvIIFPrhCtEw5eTDQ1CHWlNOjY8vHJYJ0U6Onpx86nHIRrMBkMm8FJ1G5LJ |
|
|
|
|
// U8oKYXwqaozWu/cuPwA//OFc6I5krOzh5n8WaRMkbrgbor8AtebRX74By0AXGrXe |
|
|
|
|
// cswJI7zR96oFn4Dm7Pgvpg5Zhk1vFJ+w6QtH+4DDJ6PBvlZsRkGxYBLGVd/3qhAI |
|
|
|
|
// sBAyjFlSzuP4eCRhHOhHC/e4gmAH9evFVXB88jFyRZm3K+jQ5W5CwrVRBCV2lph6 |
|
|
|
|
// 2B6P7CBJN+IjGKMhy+75y13UvvKPv9IwH8Fzl2x1gQKBgQD8qQOr7a6KhSj16wQE |
|
|
|
|
// jim2xqt9gQ2jH5No405NrKs/PFQQZnzD4YseQsiK//NUjOJiUhaT+L5jhIpzINHt |
|
|
|
|
// RJpt3bGkEZmLyjdjgTpB3GwZdXa28DNK9VdXZ19qIl/ZH0qAjKmJCRahUDASMnVi |
|
|
|
|
// M4Pkk9yx9ZIKkri4TcuMWqc0DQKBgQDlHKBTITZq/arYPD6Nl3NsoOdqVRqJrGay |
|
|
|
|
// 0TjXAVbBXe46+z5lnMsqwXb79nx14hdmSEsZULrw/3f+MnQbdjMTYLFP24visZg9 |
|
|
|
|
// MN8vAiALiiiR1a+Crz+DTA1Q8sGOMVCMqMDmD7QBys3ZuWxuapm0txAiIYUtsjJZ |
|
|
|
|
// XN76T4nZ2QKBgQCHaT3igzwsWTmesxowJtEMeGWomeXpKx8h89EfqA8PkRGsyIDN |
|
|
|
|
// qq+YxEoe1RZgljEuaLhZDdNcGsjo8woPk9kAUPTH7fbRCMuutK+4ZJ469s1tNkcH |
|
|
|
|
// QX5SBcEJbOrZvv967ehe3VQXmJZq6kgnHVzuwKBjcC2ZJRGDFY6l5l/+cQKBgCqh |
|
|
|
|
// +Adf/8NK7paMJ0urqfPFwSodKfICXZ3apswDWMRkmSbqh4La+Uc8dsqN5Dz/VEFZ |
|
|
|
|
// JHhSeGbN8uMfOlG93eU2MehdPxtw1pZUWMNjjtj23XO9ooob2CKzbSrp8TBnZsi1 |
|
|
|
|
// widNNr66oTFpeo7VUUK6acsgF6sYJJxSVr+XO1yJAoGAEhvitq8shNKcEY0xCipS |
|
|
|
|
// k1kbgyS7KKB7opVxI5+ChEqyUDijS3Y9FZixrRIWE6i2uGu86UG+v2lbKvSbM4Qm |
|
|
|
|
// xvbOcX9OVMnlRb7n8woOP10UMY+ZE2x+YEUXQTLtPYq7F66e1OfxltstMxLQA+3d |
|
|
|
|
// Y1d5piFV8PXK3Fg2F+Cj5qg= |
|
|
|
|
// -----END PRIVATE KEY----- |
|
|
|
|
// ' |
|
|
|
|
// , $this->userId |
|
|
|
|
// ); |
|
|
|
|
// |
|
|
|
|
// \OC_User::setUserId( $this->userId ); |
|
|
|
|
// |
|
|
|
|
// } |
|
|
|
|
// |
|
|
|
|
// public function testpreFile_get_contents() { |
|
|
|
|
// |
|
|
|
|
// // This won't work for now because mocking of the static keymanager class isn't working :( |
|
|
|
|
// |
|
|
|
|
// // $mock = m::mock( 'alias:OCA\Encryption\Keymanager' ); |
|
|
|
|
// // |
|
|
|
|
// // $mock->shouldReceive( 'getFileKey' )->times(2)->andReturn( $this->encDataShort ); |
|
|
|
|
// // |
|
|
|
|
// // $encrypted = $this->proxy->postFile_get_contents( 'data/'.$this->tmpFileName, $this->encDataShortKey ); |
|
|
|
|
// // |
|
|
|
|
// // $this->assertNotEquals( $this->dataShort, $encrypted ); |
|
|
|
|
// |
|
|
|
|
// $decrypted = $this->proxy->postFile_get_contents( 'data/admin/files/enc-test.txt', $this->data1 ); |
|
|
|
|
// |
|
|
|
|
// } |
|
|
|
|
// |
|
|
|
|
// } |
|
|
|
|
|
|
|
|
|
// class Test_CryptProxy extends PHPUnit_Framework_TestCase { |
|
|
|
|
// private $oldConfig; |
|
|
|
|
// private $oldKey; |
|
|
|
|
// |
|
|
|
|
// public function setUp(){ |
|
|
|
|
// $user=OC_User::getUser(); |
|
|
|
|
// |
|
|
|
|
// $this->oldConfig=OCP\Config::getAppValue('files_encryption','enable_encryption','true'); |
|
|
|
|
// OCP\Config::setAppValue('files_encryption','enable_encryption','true'); |
|
|
|
|
// $this->oldKey=isset($_SESSION['privateKey'])?$_SESSION['privateKey']:null; |
|
|
|
|
// |
|
|
|
|
// |
|
|
|
|
// //set testing key |
|
|
|
|
// $_SESSION['privateKey']=md5(time()); |
|
|
|
|
// |
|
|
|
|
// //clear all proxies and hooks so we can do clean testing |
|
|
|
|
// OC_FileProxy::clearProxies(); |
|
|
|
|
// OC_Hook::clear('OC_Filesystem'); |
|
|
|
|
// |
|
|
|
|
// //enable only the encryption hook |
|
|
|
|
// OC_FileProxy::register(new OC_FileProxy_Encryption()); |
|
|
|
|
// |
|
|
|
|
// //set up temporary storage |
|
|
|
|
// OC_Filesystem::clearMounts(); |
|
|
|
|
// OC_Filesystem::mount('OC_Filestorage_Temporary',array(),'/'); |
|
|
|
|
// |
|
|
|
|
// OC_Filesystem::init('/'.$user.'/files'); |
|
|
|
|
// |
|
|
|
|
// //set up the users home folder in the temp storage |
|
|
|
|
// $rootView=new OC_FilesystemView(''); |
|
|
|
|
// $rootView->mkdir('/'.$user); |
|
|
|
|
// $rootView->mkdir('/'.$user.'/files'); |
|
|
|
|
// } |
|
|
|
|
// |
|
|
|
|
// public function tearDown(){ |
|
|
|
|
// OCP\Config::setAppValue('files_encryption','enable_encryption',$this->oldConfig); |
|
|
|
|
// if(!is_null($this->oldKey)){ |
|
|
|
|
// $_SESSION['privateKey']=$this->oldKey; |
|
|
|
|
// } |
|
|
|
|
// } |
|
|
|
|
// |
|
|
|
|
// public function testSimple(){ |
|
|
|
|
// $file=OC::$SERVERROOT.'/3rdparty/MDB2.php'; |
|
|
|
|
// $original=file_get_contents($file); |
|
|
|
|
// |
|
|
|
|
// OC_Filesystem::file_put_contents('/file',$original); |
|
|
|
|
// |
|
|
|
|
// OC_FileProxy::$enabled=false; |
|
|
|
|
// $stored=OC_Filesystem::file_get_contents('/file'); |
|
|
|
|
// OC_FileProxy::$enabled=true; |
|
|
|
|
// |
|
|
|
|
// $fromFile=OC_Filesystem::file_get_contents('/file'); |
|
|
|
|
// $this->assertNotEquals($original,$stored); |
|
|
|
|
// $this->assertEquals(strlen($original),strlen($fromFile)); |
|
|
|
|
// $this->assertEquals($original,$fromFile); |
|
|
|
|
// |
|
|
|
|
// } |
|
|
|
|
// |
|
|
|
|
// public function testView(){ |
|
|
|
|
// $file=OC::$SERVERROOT.'/3rdparty/MDB2.php'; |
|
|
|
|
// $original=file_get_contents($file); |
|
|
|
|
// |
|
|
|
|
// $rootView=new OC_FilesystemView(''); |
|
|
|
|
// $view=new OC_FilesystemView('/'.OC_User::getUser()); |
|
|
|
|
// $userDir='/'.OC_User::getUser().'/files'; |
|
|
|
|
// |
|
|
|
|
// $rootView->file_put_contents($userDir.'/file',$original); |
|
|
|
|
// |
|
|
|
|
// OC_FileProxy::$enabled=false; |
|
|
|
|
// $stored=$rootView->file_get_contents($userDir.'/file'); |
|
|
|
|
// OC_FileProxy::$enabled=true; |
|
|
|
|
// |
|
|
|
|
// $this->assertNotEquals($original,$stored); |
|
|
|
|
// $fromFile=$rootView->file_get_contents($userDir.'/file'); |
|
|
|
|
// $this->assertEquals($original,$fromFile); |
|
|
|
|
// |
|
|
|
|
// $fromFile=$view->file_get_contents('files/file'); |
|
|
|
|
// $this->assertEquals($original,$fromFile); |
|
|
|
|
// } |
|
|
|
|
// |
|
|
|
|
// public function testBinary(){ |
|
|
|
|
// $file=__DIR__.'/binary'; |
|
|
|
|
// $original=file_get_contents($file); |
|
|
|
|
// |
|
|
|
|
// OC_Filesystem::file_put_contents('/file',$original); |
|
|
|
|
// |
|
|
|
|
// OC_FileProxy::$enabled=false; |
|
|
|
|
// $stored=OC_Filesystem::file_get_contents('/file'); |
|
|
|
|
// OC_FileProxy::$enabled=true; |
|
|
|
|
// |
|
|
|
|
// $fromFile=OC_Filesystem::file_get_contents('/file'); |
|
|
|
|
// $this->assertNotEquals($original,$stored); |
|
|
|
|
// $this->assertEquals(strlen($original),strlen($fromFile)); |
|
|
|
|
// $this->assertEquals($original,$fromFile); |
|
|
|
|
// |
|
|
|
|
// $file=__DIR__.'/zeros'; |
|
|
|
|
// $original=file_get_contents($file); |
|
|
|
|
// |
|
|
|
|
// OC_Filesystem::file_put_contents('/file',$original); |
|
|
|
|
// |
|
|
|
|
// OC_FileProxy::$enabled=false; |
|
|
|
|
// $stored=OC_Filesystem::file_get_contents('/file'); |
|
|
|
|
// OC_FileProxy::$enabled=true; |
|
|
|
|
// |
|
|
|
|
// $fromFile=OC_Filesystem::file_get_contents('/file'); |
|
|
|
|
// $this->assertNotEquals($original,$stored); |
|
|
|
|
// $this->assertEquals(strlen($original),strlen($fromFile)); |
|
|
|
|
// } |
|
|
|
|
// } |
|
|
|
|
require_once __DIR__ . '/../../../lib/base.php'; |
|
|
|
|
require_once __DIR__ . '/../lib/crypt.php'; |
|
|
|
|
require_once __DIR__ . '/../lib/keymanager.php'; |
|
|
|
|
require_once __DIR__ . '/../lib/proxy.php'; |
|
|
|
|
require_once __DIR__ . '/../lib/stream.php'; |
|
|
|
|
require_once __DIR__ . '/../lib/util.php'; |
|
|
|
|
require_once __DIR__ . '/../appinfo/app.php'; |
|
|
|
|
require_once __DIR__ . '/util.php'; |
|
|
|
|
|
|
|
|
|
use OCA\Encryption; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Class Test_Encryption_Proxy |
|
|
|
|
* @brief this class provide basic proxy app tests |
|
|
|
|
*/ |
|
|
|
|
class Test_Encryption_Proxy extends \PHPUnit_Framework_TestCase { |
|
|
|
|
|
|
|
|
|
const TEST_ENCRYPTION_PROXY_USER1 = "test-proxy-user1"; |
|
|
|
|
|
|
|
|
|
public $userId; |
|
|
|
|
public $pass; |
|
|
|
|
/** |
|
|
|
|
* @var \OC_FilesystemView |
|
|
|
|
*/ |
|
|
|
|
public $view; |
|
|
|
|
public $data; |
|
|
|
|
|
|
|
|
|
public static function setUpBeforeClass() { |
|
|
|
|
// reset backend |
|
|
|
|
\OC_User::clearBackends(); |
|
|
|
|
\OC_User::useBackend('database'); |
|
|
|
|
|
|
|
|
|
\OC_Hook::clear('OC_Filesystem'); |
|
|
|
|
\OC_Hook::clear('OC_User'); |
|
|
|
|
|
|
|
|
|
// Filesystem related hooks |
|
|
|
|
\OCA\Encryption\Helper::registerFilesystemHooks(); |
|
|
|
|
|
|
|
|
|
// clear and register hooks |
|
|
|
|
\OC_FileProxy::clearProxies(); |
|
|
|
|
\OC_FileProxy::register(new OCA\Encryption\Proxy()); |
|
|
|
|
|
|
|
|
|
// create test user |
|
|
|
|
\Test_Encryption_Util::loginHelper(\Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1, true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function setUp() { |
|
|
|
|
// set user id |
|
|
|
|
\OC_User::setUserId(\Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1); |
|
|
|
|
$this->userId = \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1; |
|
|
|
|
$this->pass = \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1; |
|
|
|
|
|
|
|
|
|
// init filesystem view |
|
|
|
|
$this->view = new \OC_FilesystemView('/'. \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '/files'); |
|
|
|
|
|
|
|
|
|
// init short data |
|
|
|
|
$this->data = 'hats'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static function tearDownAfterClass() { |
|
|
|
|
// cleanup test user |
|
|
|
|
\OC_User::deleteUser(\Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @medium |
|
|
|
|
* @brief test if postFileSize returns the unencrypted file size |
|
|
|
|
*/ |
|
|
|
|
function testPostFileSize() { |
|
|
|
|
|
|
|
|
|
// generate filename |
|
|
|
|
$filename = 'tmp-' . time() . '.txt'; |
|
|
|
|
|
|
|
|
|
$this->view->file_put_contents($filename, $this->data); |
|
|
|
|
|
|
|
|
|
\OC_FileProxy::$enabled = false; |
|
|
|
|
|
|
|
|
|
$unencryptedSize = $this->view->filesize($filename); |
|
|
|
|
|
|
|
|
|
\OC_FileProxy::$enabled = true; |
|
|
|
|
|
|
|
|
|
$encryptedSize = $this->view->filesize($filename); |
|
|
|
|
|
|
|
|
|
$this->assertTrue($encryptedSize !== $unencryptedSize); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|