From 9dd277576a87b8876ebf281ba21161fa30645807 Mon Sep 17 00:00:00 2001 From: Florin Peter Date: Sun, 26 May 2013 20:44:15 +0200 Subject: [PATCH] added users for tests reformat code to meet coding guidelines --- apps/files_encryption/tests/crypt.php | 459 ++++++------ apps/files_encryption/tests/encryption.key | Bin 24 -> 24 bytes apps/files_encryption/tests/keymanager.php | 135 ++-- .../tests/legacy-encrypted-text.txt | 2 +- apps/files_encryption/tests/share.php | 673 +++++++++++------- apps/files_encryption/tests/stream.php | 114 ++- apps/files_encryption/tests/trashbin.php | 191 +++-- apps/files_encryption/tests/util.php | 269 ++++--- apps/files_encryption/tests/webdav.php | 146 ++-- 9 files changed, 1098 insertions(+), 891 deletions(-) diff --git a/apps/files_encryption/tests/crypt.php b/apps/files_encryption/tests/crypt.php index b8fbdda400f..74b4252a1d4 100755 --- a/apps/files_encryption/tests/crypt.php +++ b/apps/files_encryption/tests/crypt.php @@ -7,23 +7,25 @@ * See the COPYING-README file. */ -require_once realpath( dirname( __FILE__ ) . '/../3rdparty/Crypt_Blowfish/Blowfish.php' ); -require_once realpath( dirname( __FILE__ ) . '/../../../lib/base.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/crypt.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/keymanager.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/proxy.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/stream.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/util.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/helper.php' ); -require_once realpath( dirname( __FILE__ ) . '/../appinfo/app.php' ); +require_once realpath(dirname(__FILE__) . '/../3rdparty/Crypt_Blowfish/Blowfish.php'); +require_once realpath(dirname(__FILE__) . '/../../../lib/base.php'); +require_once realpath(dirname(__FILE__) . '/../lib/crypt.php'); +require_once realpath(dirname(__FILE__) . '/../lib/keymanager.php'); +require_once realpath(dirname(__FILE__) . '/../lib/proxy.php'); +require_once realpath(dirname(__FILE__) . '/../lib/stream.php'); +require_once realpath(dirname(__FILE__) . '/../lib/util.php'); +require_once realpath(dirname(__FILE__) . '/../lib/helper.php'); +require_once realpath(dirname(__FILE__) . '/../appinfo/app.php'); +require_once realpath(dirname(__FILE__) . '/util.php'); use OCA\Encryption; /** * Class Test_Encryption_Crypt */ -class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase -{ +class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase { + + const TEST_ENCRYPTION_CRYPT_USER1 = "test-crypt-user1"; public $userId; public $pass; @@ -42,7 +44,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase public static function setUpBeforeClass() { // reset backend \OC_User::clearBackends(); - \OC_User::useBackend( 'database' ); + \OC_User::useBackend('database'); // Filesystem related hooks \OCA\Encryption\Helper::registerFilesystemHooks(); @@ -52,62 +54,53 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase // clear and register hooks \OC_FileProxy::clearProxies(); - \OC_FileProxy::register( new OCA\Encryption\Proxy() ); - - // setup filesystem - \OC_Util::tearDownFS(); - \OC_User::setUserId( '' ); - \OC\Files\Filesystem::tearDown(); - \OC_Util::setupFS( 'admin' ); - \OC_User::setUserId( 'admin' ); + \OC_FileProxy::register(new OCA\Encryption\Proxy()); - // login admin - $params['uid'] = 'admin'; - $params['password'] = 'admin'; - OCA\Encryption\Hooks::login( $params ); + // create test user + \Test_Encryption_Util::loginHelper(\Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1, true); } function setUp() { + // set user id + \OC_User::setUserId(\Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1); + $this->userId = \Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1; + $this->pass = \Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1; + // set content for encrypting / decrypting in tests - $this->dataLong = file_get_contents( realpath( dirname( __FILE__ ) . '/../lib/crypt.php' ) ); + $this->dataLong = file_get_contents(realpath(dirname(__FILE__) . '/../lib/crypt.php')); $this->dataShort = 'hats'; - $this->dataUrl = realpath( dirname( __FILE__ ) . '/../lib/crypt.php' ); - $this->legacyData = realpath( dirname( __FILE__ ) . '/legacy-text.txt' ); - $this->legacyEncryptedData = realpath( dirname( __FILE__ ) . '/legacy-encrypted-text.txt' ); - $this->legacyEncryptedDataKey = realpath( dirname( __FILE__ ) . '/encryption.key' ); + $this->dataUrl = realpath(dirname(__FILE__) . '/../lib/crypt.php'); + $this->legacyData = realpath(dirname(__FILE__) . '/legacy-text.txt'); + $this->legacyEncryptedData = realpath(dirname(__FILE__) . '/legacy-encrypted-text.txt'); + $this->legacyEncryptedDataKey = realpath(dirname(__FILE__) . '/encryption.key'); $this->randomKey = Encryption\Crypt::generateKey(); $keypair = Encryption\Crypt::createKeypair(); $this->genPublicKey = $keypair['publicKey']; $this->genPrivateKey = $keypair['privateKey']; - $this->view = new \OC_FilesystemView( '/' ); - - \OC_User::setUserId( 'admin' ); - $this->userId = 'admin'; - $this->pass = 'admin'; - - $userHome = \OC_User::getHome( $this->userId ); - $this->dataDir = str_replace( '/' . $this->userId, '', $userHome ); + $this->view = new \OC_FilesystemView('/'); // remember files_trashbin state - $this->stateFilesTrashbin = OC_App::isEnabled( 'files_trashbin' ); + $this->stateFilesTrashbin = OC_App::isEnabled('files_trashbin'); // we don't want to tests with app files_trashbin enabled - \OC_App::disable( 'files_trashbin' ); + \OC_App::disable('files_trashbin'); } function tearDown() { // reset app files_trashbin - if ( $this->stateFilesTrashbin ) { - OC_App::enable( 'files_trashbin' ); - } else { - OC_App::disable( 'files_trashbin' ); + if ($this->stateFilesTrashbin) { + OC_App::enable('files_trashbin'); + } + else { + OC_App::disable('files_trashbin'); } } public static function tearDownAfterClass() { - + // cleanup test user + \OC_User::deleteUser(\Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1); } function testGenerateKey() { @@ -116,7 +109,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase $key = Encryption\Crypt::generateKey(); - $this->assertTrue( strlen( $key ) > 16 ); + $this->assertTrue(strlen($key) > 16); } @@ -127,7 +120,7 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase $iv = Encryption\Crypt::generateIv(); - $this->assertEquals( 16, strlen( $iv ) ); + $this->assertEquals(16, strlen($iv)); return $iv; @@ -136,30 +129,31 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase /** * @depends testGenerateIv */ - function testConcatIv( $iv ) { + function testConcatIv($iv) { - $catFile = Encryption\Crypt::concatIv( $this->dataLong, $iv ); + $catFile = Encryption\Crypt::concatIv($this->dataLong, $iv); // Fetch encryption metadata from end of file - $meta = substr( $catFile, -22 ); + $meta = substr($catFile, -22); - $identifier = substr( $meta, 0, 6 ); + $identifier = substr($meta, 0, 6); // Fetch IV from end of file - $foundIv = substr( $meta, 6 ); + $foundIv = substr($meta, 6); - $this->assertEquals( '00iv00', $identifier ); + $this->assertEquals('00iv00', $identifier); - $this->assertEquals( $iv, $foundIv ); + $this->assertEquals($iv, $foundIv); // Remove IV and IV identifier text to expose encrypted content - $data = substr( $catFile, 0, -22 ); + $data = substr($catFile, 0, -22); - $this->assertEquals( $this->dataLong, $data ); + $this->assertEquals($this->dataLong, $data); return array( 'iv' => $iv - , 'catfile' => $catFile + , + 'catfile' => $catFile ); } @@ -167,16 +161,16 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase /** * @depends testConcatIv */ - function testSplitIv( $testConcatIv ) { + function testSplitIv($testConcatIv) { // Split catfile into components - $splitCatfile = Encryption\Crypt::splitIv( $testConcatIv['catfile'] ); + $splitCatfile = Encryption\Crypt::splitIv($testConcatIv['catfile']); // Check that original IV and split IV match - $this->assertEquals( $testConcatIv['iv'], $splitCatfile['iv'] ); + $this->assertEquals($testConcatIv['iv'], $splitCatfile['iv']); // Check that original data and split data match - $this->assertEquals( $this->dataLong, $splitCatfile['encrypted'] ); + $this->assertEquals($this->dataLong, $splitCatfile['encrypted']); } @@ -185,11 +179,11 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase */ function testAddPadding() { - $padded = Encryption\Crypt::addPadding( $this->dataLong ); + $padded = Encryption\Crypt::addPadding($this->dataLong); - $padding = substr( $padded, -2 ); + $padding = substr($padded, -2); - $this->assertEquals( 'xx', $padding ); + $this->assertEquals('xx', $padding); return $padded; @@ -198,37 +192,37 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase /** * @depends testAddPadding */ - function testRemovePadding( $padded ) { + function testRemovePadding($padded) { - $noPadding = Encryption\Crypt::RemovePadding( $padded ); + $noPadding = Encryption\Crypt::RemovePadding($padded); - $this->assertEquals( $this->dataLong, $noPadding ); + $this->assertEquals($this->dataLong, $noPadding); } function testEncrypt() { - $random = openssl_random_pseudo_bytes( 13 ); + $random = openssl_random_pseudo_bytes(13); - $iv = substr( base64_encode( $random ), 0, -4 ); // i.e. E5IG033j+mRNKrht + $iv = substr(base64_encode($random), 0, -4); // i.e. E5IG033j+mRNKrht - $crypted = Encryption\Crypt::encrypt( $this->dataUrl, $iv, 'hat' ); + $crypted = Encryption\Crypt::encrypt($this->dataUrl, $iv, 'hat'); - $this->assertNotEquals( $this->dataUrl, $crypted ); + $this->assertNotEquals($this->dataUrl, $crypted); } function testDecrypt() { - $random = openssl_random_pseudo_bytes( 13 ); + $random = openssl_random_pseudo_bytes(13); - $iv = substr( base64_encode( $random ), 0, -4 ); // i.e. E5IG033j+mRNKrht + $iv = substr(base64_encode($random), 0, -4); // i.e. E5IG033j+mRNKrht - $crypted = Encryption\Crypt::encrypt( $this->dataUrl, $iv, 'hat' ); + $crypted = Encryption\Crypt::encrypt($this->dataUrl, $iv, 'hat'); - $decrypt = Encryption\Crypt::decrypt( $crypted, $iv, 'hat' ); + $decrypt = Encryption\Crypt::decrypt($crypted, $iv, 'hat'); - $this->assertEquals( $this->dataUrl, $decrypt ); + $this->assertEquals($this->dataUrl, $decrypt); } @@ -236,14 +230,14 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase # TODO: search in keyfile for actual content as IV will ensure this test always passes - $crypted = Encryption\Crypt::symmetricEncryptFileContent( $this->dataShort, 'hat' ); + $crypted = Encryption\Crypt::symmetricEncryptFileContent($this->dataShort, 'hat'); - $this->assertNotEquals( $this->dataShort, $crypted ); + $this->assertNotEquals($this->dataShort, $crypted); - $decrypt = Encryption\Crypt::symmetricDecryptFileContent( $crypted, 'hat' ); + $decrypt = Encryption\Crypt::symmetricDecryptFileContent($crypted, 'hat'); - $this->assertEquals( $this->dataShort, $decrypt ); + $this->assertEquals($this->dataShort, $decrypt); } @@ -251,49 +245,49 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase $filename = 'tmp-' . time() . '.test'; - $cryptedFile = file_put_contents( 'crypt://' . $filename, $this->dataShort ); + $cryptedFile = file_put_contents('crypt://' . $filename, $this->dataShort); // Test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); // Disable encryption proxy to prevent recursive calls $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; // Get file contents without using any wrapper to get it's actual contents on disk - $retreivedCryptedFile = $this->view->file_get_contents( $this->userId . '/files/' . $filename ); + $retreivedCryptedFile = $this->view->file_get_contents($this->userId . '/files/' . $filename); // Re-enable proxy - our work is done \OC_FileProxy::$enabled = $proxyStatus; // Check that the file was encrypted before being written to disk - $this->assertNotEquals( $this->dataShort, $retreivedCryptedFile ); + $this->assertNotEquals($this->dataShort, $retreivedCryptedFile); // Get the encrypted keyfile - $encKeyfile = Encryption\Keymanager::getFileKey( $this->view, $this->userId, $filename ); + $encKeyfile = Encryption\Keymanager::getFileKey($this->view, $this->userId, $filename); // Attempt to fetch the user's shareKey - $shareKey = Encryption\Keymanager::getShareKey( $this->view, $this->userId, $filename ); + $shareKey = Encryption\Keymanager::getShareKey($this->view, $this->userId, $filename); // get session - $session = new Encryption\Session( $this->view ); + $session = new Encryption\Session($this->view); // get private key - $privateKey = $session->getPrivateKey( $this->userId ); + $privateKey = $session->getPrivateKey($this->userId); // Decrypt keyfile with shareKey - $plainKeyfile = Encryption\Crypt::multiKeyDecrypt( $encKeyfile, $shareKey, $privateKey ); + $plainKeyfile = Encryption\Crypt::multiKeyDecrypt($encKeyfile, $shareKey, $privateKey); // Manually decrypt - $manualDecrypt = Encryption\Crypt::symmetricDecryptFileContent( $retreivedCryptedFile, $plainKeyfile ); + $manualDecrypt = Encryption\Crypt::symmetricDecryptFileContent($retreivedCryptedFile, $plainKeyfile); // Check that decrypted data matches - $this->assertEquals( $this->dataShort, $manualDecrypt ); + $this->assertEquals($this->dataShort, $manualDecrypt); // Teardown - $this->view->unlink( $this->userId . '/files/' . $filename ); + $this->view->unlink($this->userId . '/files/' . $filename); - Encryption\Keymanager::deleteFileKey( $this->view, $this->userId, $filename ); + Encryption\Keymanager::deleteFileKey($this->view, $this->userId, $filename); } /** @@ -308,70 +302,77 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase $filename = 'tmp-' . time() . '.test'; // Save long data as encrypted file using stream wrapper - $cryptedFile = file_put_contents( 'crypt://' . $filename, $this->dataLong . $this->dataLong ); + $cryptedFile = file_put_contents('crypt://' . $filename, $this->dataLong . $this->dataLong); // Test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); // Disable encryption proxy to prevent recursive calls $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; // Get file contents without using any wrapper to get it's actual contents on disk - $retreivedCryptedFile = $this->view->file_get_contents( $this->userId . '/files/' . $filename ); + $retreivedCryptedFile = $this->view->file_get_contents($this->userId . '/files/' . $filename); // Re-enable proxy - our work is done \OC_FileProxy::$enabled = $proxyStatus; // Check that the file was encrypted before being written to disk - $this->assertNotEquals( $this->dataLong . $this->dataLong, $retreivedCryptedFile ); + $this->assertNotEquals($this->dataLong . $this->dataLong, $retreivedCryptedFile); // Manuallly split saved file into separate IVs and encrypted chunks - $r = preg_split( '/(00iv00.{16,18})/', $retreivedCryptedFile, NULL, PREG_SPLIT_DELIM_CAPTURE ); + $r = preg_split('/(00iv00.{16,18})/', $retreivedCryptedFile, NULL, PREG_SPLIT_DELIM_CAPTURE); //print_r($r); // Join IVs and their respective data chunks - $e = array( $r[0] . $r[1], $r[2] . $r[3], $r[4] . $r[5], $r[6] . $r[7], $r[8] . $r[9], $r[10] . $r[11] ); //.$r[11], $r[12].$r[13], $r[14] ); + $e = array( + $r[0] . $r[1], + $r[2] . $r[3], + $r[4] . $r[5], + $r[6] . $r[7], + $r[8] . $r[9], + $r[10] . $r[11] + ); //.$r[11], $r[12].$r[13], $r[14] ); //print_r($e); // Get the encrypted keyfile - $encKeyfile = Encryption\Keymanager::getFileKey( $this->view, $this->userId, $filename ); + $encKeyfile = Encryption\Keymanager::getFileKey($this->view, $this->userId, $filename); // Attempt to fetch the user's shareKey - $shareKey = Encryption\Keymanager::getShareKey( $this->view, $this->userId, $filename ); + $shareKey = Encryption\Keymanager::getShareKey($this->view, $this->userId, $filename); // get session - $session = new Encryption\Session( $this->view ); + $session = new Encryption\Session($this->view); // get private key - $privateKey = $session->getPrivateKey( $this->userId ); + $privateKey = $session->getPrivateKey($this->userId); // Decrypt keyfile with shareKey - $plainKeyfile = Encryption\Crypt::multiKeyDecrypt( $encKeyfile, $shareKey, $privateKey ); + $plainKeyfile = Encryption\Crypt::multiKeyDecrypt($encKeyfile, $shareKey, $privateKey); // Set var for reassembling decrypted content $decrypt = ''; // Manually decrypt chunk - foreach ( $e as $chunk ) { + foreach ($e as $chunk) { - $chunkDecrypt = Encryption\Crypt::symmetricDecryptFileContent( $chunk, $plainKeyfile ); + $chunkDecrypt = Encryption\Crypt::symmetricDecryptFileContent($chunk, $plainKeyfile); // Assemble decrypted chunks $decrypt .= $chunkDecrypt; } - $this->assertEquals( $this->dataLong . $this->dataLong, $decrypt ); + $this->assertEquals($this->dataLong . $this->dataLong, $decrypt); // Teardown - $this->view->unlink( $this->userId . '/files/' . $filename ); + $this->view->unlink($this->userId . '/files/' . $filename); - Encryption\Keymanager::deleteFileKey( $this->view, $this->userId, $filename ); + Encryption\Keymanager::deleteFileKey($this->view, $this->userId, $filename); } @@ -383,26 +384,26 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase $filename = 'tmp-' . time(); // Save long data as encrypted file using stream wrapper - $cryptedFile = file_put_contents( 'crypt://' . $filename, $this->dataShort ); + $cryptedFile = file_put_contents('crypt://' . $filename, $this->dataShort); // Test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); // Disable encryption proxy to prevent recursive calls $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; - $this->assertTrue( Encryption\Crypt::isEncryptedMeta( $filename ) ); + $this->assertTrue(Encryption\Crypt::isEncryptedMeta($filename)); \OC_FileProxy::$enabled = $proxyStatus; // Get file decrypted contents - $decrypt = file_get_contents( 'crypt://' . $filename ); + $decrypt = file_get_contents('crypt://' . $filename); - $this->assertEquals( $this->dataShort, $decrypt ); + $this->assertEquals($this->dataShort, $decrypt); // tear down - $this->view->unlink( $this->userId . '/files/' . $filename ); + $this->view->unlink($this->userId . '/files/' . $filename); } function testSymmetricStreamDecryptLongFileContent() { @@ -410,44 +411,44 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase $filename = 'tmp-' . time(); // Save long data as encrypted file using stream wrapper - $cryptedFile = file_put_contents( 'crypt://' . $filename, $this->dataLong ); + $cryptedFile = file_put_contents('crypt://' . $filename, $this->dataLong); // Test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); // Get file decrypted contents - $decrypt = file_get_contents( 'crypt://' . $filename ); + $decrypt = file_get_contents('crypt://' . $filename); - $this->assertEquals( $this->dataLong, $decrypt ); + $this->assertEquals($this->dataLong, $decrypt); // tear down - $this->view->unlink( $this->userId . '/files/' . $filename ); + $this->view->unlink($this->userId . '/files/' . $filename); } function testSymmetricEncryptFileContentKeyfile() { # TODO: search in keyfile for actual content as IV will ensure this test always passes - $crypted = Encryption\Crypt::symmetricEncryptFileContentKeyfile( $this->dataUrl ); + $crypted = Encryption\Crypt::symmetricEncryptFileContentKeyfile($this->dataUrl); - $this->assertNotEquals( $this->dataUrl, $crypted['encrypted'] ); + $this->assertNotEquals($this->dataUrl, $crypted['encrypted']); - $decrypt = Encryption\Crypt::symmetricDecryptFileContent( $crypted['encrypted'], $crypted['key'] ); + $decrypt = Encryption\Crypt::symmetricDecryptFileContent($crypted['encrypted'], $crypted['key']); - $this->assertEquals( $this->dataUrl, $decrypt ); + $this->assertEquals($this->dataUrl, $decrypt); } function testIsEncryptedContent() { - $this->assertFalse( Encryption\Crypt::isCatfileContent( $this->dataUrl ) ); + $this->assertFalse(Encryption\Crypt::isCatfileContent($this->dataUrl)); - $this->assertFalse( Encryption\Crypt::isCatfileContent( $this->legacyEncryptedData ) ); + $this->assertFalse(Encryption\Crypt::isCatfileContent($this->legacyEncryptedData)); - $keyfileContent = Encryption\Crypt::symmetricEncryptFileContent( $this->dataUrl, 'hat' ); + $keyfileContent = Encryption\Crypt::symmetricEncryptFileContent($this->dataUrl, 'hat'); - $this->assertTrue( Encryption\Crypt::isCatfileContent( $keyfileContent ) ); + $this->assertTrue(Encryption\Crypt::isCatfileContent($keyfileContent)); } @@ -457,21 +458,21 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase $pair1 = Encryption\Crypt::createKeypair(); - $this->assertEquals( 2, count( $pair1 ) ); + $this->assertEquals(2, count($pair1)); - $this->assertTrue( strlen( $pair1['publicKey'] ) > 1 ); + $this->assertTrue(strlen($pair1['publicKey']) > 1); - $this->assertTrue( strlen( $pair1['privateKey'] ) > 1 ); + $this->assertTrue(strlen($pair1['privateKey']) > 1); - $crypted = Encryption\Crypt::multiKeyEncrypt( $this->dataShort, array( $pair1['publicKey'] ) ); + $crypted = Encryption\Crypt::multiKeyEncrypt($this->dataShort, array($pair1['publicKey'])); - $this->assertNotEquals( $this->dataShort, $crypted['data'] ); + $this->assertNotEquals($this->dataShort, $crypted['data']); - $decrypt = Encryption\Crypt::multiKeyDecrypt( $crypted['data'], $crypted['keys'][0], $pair1['privateKey'] ); + $decrypt = Encryption\Crypt::multiKeyDecrypt($crypted['data'], $crypted['keys'][0], $pair1['privateKey']); - $this->assertEquals( $this->dataShort, $decrypt ); + $this->assertEquals($this->dataShort, $decrypt); } @@ -481,14 +482,14 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase $pair1 = Encryption\Crypt::createKeypair(); // Encrypt data - $crypted = Encryption\Crypt::keyEncrypt( $this->dataUrl, $pair1['publicKey'] ); + $crypted = Encryption\Crypt::keyEncrypt($this->dataUrl, $pair1['publicKey']); - $this->assertNotEquals( $this->dataUrl, $crypted ); + $this->assertNotEquals($this->dataUrl, $crypted); // Decrypt data - $decrypt = Encryption\Crypt::keyDecrypt( $crypted, $pair1['privateKey'] ); + $decrypt = Encryption\Crypt::keyDecrypt($crypted, $pair1['privateKey']); - $this->assertEquals( $this->dataUrl, $decrypt ); + $this->assertEquals($this->dataUrl, $decrypt); } @@ -497,9 +498,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase */ function testLegacyEncryptShort() { - $crypted = Encryption\Crypt::legacyEncrypt( $this->dataShort, $this->pass ); + $crypted = Encryption\Crypt::legacyEncrypt($this->dataShort, $this->pass); - $this->assertNotEquals( $this->dataShort, $crypted ); + $this->assertNotEquals($this->dataShort, $crypted); # TODO: search inencrypted text for actual content to ensure it # genuine transformation @@ -512,11 +513,11 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase * @brief test decryption using legacy blowfish method * @depends testLegacyEncryptShort */ - function testLegacyDecryptShort( $crypted ) { + function testLegacyDecryptShort($crypted) { - $decrypted = Encryption\Crypt::legacyDecrypt( $crypted, $this->pass ); + $decrypted = Encryption\Crypt::legacyDecrypt($crypted, $this->pass); - $this->assertEquals( $this->dataShort, $decrypted ); + $this->assertEquals($this->dataShort, $decrypted); } @@ -525,9 +526,9 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase */ function testLegacyEncryptLong() { - $crypted = Encryption\Crypt::legacyEncrypt( $this->dataLong, $this->pass ); + $crypted = Encryption\Crypt::legacyEncrypt($this->dataLong, $this->pass); - $this->assertNotEquals( $this->dataLong, $crypted ); + $this->assertNotEquals($this->dataLong, $crypted); # TODO: search inencrypted text for actual content to ensure it # genuine transformation @@ -540,13 +541,13 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase * @brief test decryption using legacy blowfish method * @depends testLegacyEncryptLong */ - function testLegacyDecryptLong( $crypted ) { + function testLegacyDecryptLong($crypted) { - $decrypted = Encryption\Crypt::legacyDecrypt( $crypted, $this->pass ); + $decrypted = Encryption\Crypt::legacyDecrypt($crypted, $this->pass); - $this->assertEquals( $this->dataLong, $decrypted ); + $this->assertEquals($this->dataLong, $decrypted); - $this->assertFalse( Encryption\Crypt::getBlowfish( '' ) ); + $this->assertFalse(Encryption\Crypt::getBlowfish('')); } /** @@ -556,15 +557,15 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase function testLegacyCreateKey() { // Create encrypted key - $encKey = Encryption\Crypt::legacyCreateKey( $this->pass ); + $encKey = Encryption\Crypt::legacyCreateKey($this->pass); // Decrypt key - $key = Encryption\Crypt::legacyDecrypt( $encKey, $this->pass ); + $key = Encryption\Crypt::legacyDecrypt($encKey, $this->pass); - $this->assertTrue( is_numeric( $key ) ); + $this->assertTrue(is_numeric($key)); // Check that key is correct length - $this->assertEquals( 20, strlen( $key ) ); + $this->assertEquals(20, strlen($key)); } @@ -572,11 +573,11 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase * @brief test decryption using legacy blowfish method * @depends testLegacyEncryptLong */ - function testLegacyKeyRecryptKeyfileEncrypt( $crypted ) { + function testLegacyKeyRecryptKeyfileEncrypt($crypted) { - $recrypted = Encryption\Crypt::LegacyKeyRecryptKeyfile( $crypted, $this->pass, array( $this->genPublicKey ), $this->pass, '' ); + $recrypted = Encryption\Crypt::LegacyKeyRecryptKeyfile($crypted, $this->pass, array($this->genPublicKey), $this->pass, ''); - $this->assertNotEquals( $this->dataLong, $recrypted['data'] ); + $this->assertNotEquals($this->dataLong, $recrypted['data']); return $recrypted; @@ -590,27 +591,27 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase $filename = 'tmp-' . time(); // Save long data as encrypted file using stream wrapper - $cryptedFile = file_put_contents( 'crypt://' . $filename, $this->dataLong ); + $cryptedFile = file_put_contents('crypt://' . $filename, $this->dataLong); // Test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); // Get file decrypted contents - $decrypt = file_get_contents( 'crypt://' . $filename ); + $decrypt = file_get_contents('crypt://' . $filename); - $this->assertEquals( $this->dataLong, $decrypt ); + $this->assertEquals($this->dataLong, $decrypt); $newFilename = 'tmp-new-' . time(); - $view = new \OC\Files\View( '/' . $this->userId . '/files' ); - $view->rename( $filename, $newFilename ); + $view = new \OC\Files\View('/' . $this->userId . '/files'); + $view->rename($filename, $newFilename); // Get file decrypted contents - $newDecrypt = file_get_contents( 'crypt://' . $newFilename ); + $newDecrypt = file_get_contents('crypt://' . $newFilename); - $this->assertEquals( $this->dataLong, $newDecrypt ); + $this->assertEquals($this->dataLong, $newDecrypt); // tear down - $view->unlink( $newFilename ); + $view->unlink($newFilename); } function testMoveFileIntoFolder() { @@ -618,191 +619,191 @@ class Test_Encryption_Crypt extends \PHPUnit_Framework_TestCase $filename = 'tmp-' . time(); // Save long data as encrypted file using stream wrapper - $cryptedFile = file_put_contents( 'crypt://' . $filename, $this->dataLong ); + $cryptedFile = file_put_contents('crypt://' . $filename, $this->dataLong); // Test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); // Get file decrypted contents - $decrypt = file_get_contents( 'crypt://' . $filename ); + $decrypt = file_get_contents('crypt://' . $filename); - $this->assertEquals( $this->dataLong, $decrypt ); + $this->assertEquals($this->dataLong, $decrypt); $newFolder = '/newfolder' . time(); $newFilename = 'tmp-new-' . time(); - $view = new \OC\Files\View( '/' . $this->userId . '/files' ); - $view->mkdir( $newFolder ); - $view->rename( $filename, $newFolder . '/' . $newFilename ); + $view = new \OC\Files\View('/' . $this->userId . '/files'); + $view->mkdir($newFolder); + $view->rename($filename, $newFolder . '/' . $newFilename); // Get file decrypted contents - $newDecrypt = file_get_contents( 'crypt://' . $newFolder . '/' . $newFilename ); + $newDecrypt = file_get_contents('crypt://' . $newFolder . '/' . $newFilename); - $this->assertEquals( $this->dataLong, $newDecrypt ); + $this->assertEquals($this->dataLong, $newDecrypt); // tear down - $view->unlink( $newFolder ); + $view->unlink($newFolder); } function testMoveFolder() { - $view = new \OC\Files\View( '/' . $this->userId . '/files' ); + $view = new \OC\Files\View('/' . $this->userId . '/files'); $filename = '/tmp-' . time(); $folder = '/folder' . time(); - $view->mkdir( $folder ); + $view->mkdir($folder); // Save long data as encrypted file using stream wrapper - $cryptedFile = file_put_contents( 'crypt://' . $folder . $filename, $this->dataLong ); + $cryptedFile = file_put_contents('crypt://' . $folder . $filename, $this->dataLong); // Test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); // Get file decrypted contents - $decrypt = file_get_contents( 'crypt://' . $folder . $filename ); + $decrypt = file_get_contents('crypt://' . $folder . $filename); - $this->assertEquals( $this->dataLong, $decrypt ); + $this->assertEquals($this->dataLong, $decrypt); $newFolder = '/newfolder/subfolder' . time(); - $view->mkdir( '/newfolder' ); + $view->mkdir('/newfolder'); - $view->rename( $folder, $newFolder ); + $view->rename($folder, $newFolder); // Get file decrypted contents - $newDecrypt = file_get_contents( 'crypt://' . $newFolder . $filename ); + $newDecrypt = file_get_contents('crypt://' . $newFolder . $filename); - $this->assertEquals( $this->dataLong, $newDecrypt ); + $this->assertEquals($this->dataLong, $newDecrypt); // tear down - $view->unlink( $newFolder ); - $view->unlink( '/newfolder' ); + $view->unlink($newFolder); + $view->unlink('/newfolder'); } function testChangePassphrase() { $filename = 'tmp-' . time(); // Save long data as encrypted file using stream wrapper - $cryptedFile = file_put_contents( 'crypt://' . $filename, $this->dataLong ); + $cryptedFile = file_put_contents('crypt://' . $filename, $this->dataLong); // Test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); // Get file decrypted contents - $decrypt = file_get_contents( 'crypt://' . $filename ); + $decrypt = file_get_contents('crypt://' . $filename); - $this->assertEquals( $this->dataLong, $decrypt ); + $this->assertEquals($this->dataLong, $decrypt); // change password - \OC_User::setPassword( $this->userId, 'test', null ); + \OC_User::setPassword($this->userId, 'test', null); // relogin $params['uid'] = $this->userId; $params['password'] = 'test'; - OCA\Encryption\Hooks::login( $params ); + OCA\Encryption\Hooks::login($params); // Get file decrypted contents - $newDecrypt = file_get_contents( 'crypt://' . $filename ); + $newDecrypt = file_get_contents('crypt://' . $filename); - $this->assertEquals( $this->dataLong, $newDecrypt ); + $this->assertEquals($this->dataLong, $newDecrypt); // tear down // change password back - \OC_User::setPassword( $this->userId, $this->pass ); - $view = new \OC\Files\View( '/' . $this->userId . '/files' ); - $view->unlink( $filename ); + \OC_User::setPassword($this->userId, $this->pass); + $view = new \OC\Files\View('/' . $this->userId . '/files'); + $view->unlink($filename); } function testViewFilePutAndGetContents() { $filename = '/tmp-' . time(); - $view = new \OC\Files\View( '/' . $this->userId . '/files' ); + $view = new \OC\Files\View('/' . $this->userId . '/files'); // Save short data as encrypted file using stream wrapper - $cryptedFile = $view->file_put_contents( $filename, $this->dataShort ); + $cryptedFile = $view->file_put_contents($filename, $this->dataShort); // Test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); // Get file decrypted contents - $decrypt = $view->file_get_contents( $filename ); + $decrypt = $view->file_get_contents($filename); - $this->assertEquals( $this->dataShort, $decrypt ); + $this->assertEquals($this->dataShort, $decrypt); // Save long data as encrypted file using stream wrapper - $cryptedFileLong = $view->file_put_contents( $filename, $this->dataLong ); + $cryptedFileLong = $view->file_put_contents($filename, $this->dataLong); // Test that data was successfully written - $this->assertTrue( is_int( $cryptedFileLong ) ); + $this->assertTrue(is_int($cryptedFileLong)); // Get file decrypted contents - $decryptLong = $view->file_get_contents( $filename ); + $decryptLong = $view->file_get_contents($filename); - $this->assertEquals( $this->dataLong, $decryptLong ); + $this->assertEquals($this->dataLong, $decryptLong); // tear down - $view->unlink( $filename ); + $view->unlink($filename); } function testTouchExistingFile() { $filename = '/tmp-' . time(); - $view = new \OC\Files\View( '/' . $this->userId . '/files' ); + $view = new \OC\Files\View('/' . $this->userId . '/files'); // Save short data as encrypted file using stream wrapper - $cryptedFile = $view->file_put_contents( $filename, $this->dataShort ); + $cryptedFile = $view->file_put_contents($filename, $this->dataShort); // Test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); - $view->touch( $filename ); + $view->touch($filename); // Get file decrypted contents - $decrypt = $view->file_get_contents( $filename ); + $decrypt = $view->file_get_contents($filename); - $this->assertEquals( $this->dataShort, $decrypt ); + $this->assertEquals($this->dataShort, $decrypt); // tear down - $view->unlink( $filename ); + $view->unlink($filename); } function testTouchFile() { $filename = '/tmp-' . time(); - $view = new \OC\Files\View( '/' . $this->userId . '/files' ); + $view = new \OC\Files\View('/' . $this->userId . '/files'); - $view->touch( $filename ); + $view->touch($filename); // Save short data as encrypted file using stream wrapper - $cryptedFile = $view->file_put_contents( $filename, $this->dataShort ); + $cryptedFile = $view->file_put_contents($filename, $this->dataShort); // Test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); // Get file decrypted contents - $decrypt = $view->file_get_contents( $filename ); + $decrypt = $view->file_get_contents($filename); - $this->assertEquals( $this->dataShort, $decrypt ); + $this->assertEquals($this->dataShort, $decrypt); // tear down - $view->unlink( $filename ); + $view->unlink($filename); } function testFopenFile() { $filename = '/tmp-' . time(); - $view = new \OC\Files\View( '/' . $this->userId . '/files' ); + $view = new \OC\Files\View('/' . $this->userId . '/files'); // Save short data as encrypted file using stream wrapper - $cryptedFile = $view->file_put_contents( $filename, $this->dataShort ); + $cryptedFile = $view->file_put_contents($filename, $this->dataShort); // Test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); - $handle = $view->fopen( $filename, 'r' ); + $handle = $view->fopen($filename, 'r'); // Get file decrypted contents - $decrypt = fgets( $handle ); + $decrypt = fgets($handle); - $this->assertEquals( $this->dataShort, $decrypt ); + $this->assertEquals($this->dataShort, $decrypt); // tear down - $view->unlink( $filename ); + $view->unlink($filename); } } diff --git a/apps/files_encryption/tests/encryption.key b/apps/files_encryption/tests/encryption.key index 4495cee78e257cc4ef42add0616a1071ecb43b72..4ee962145c247ee03538aa70a2ff0da216c5c51c 100644 GIT binary patch literal 24 gcmcCzpD}gytdataLong = file_get_contents( realpath( dirname( __FILE__ ) . '/../lib/crypt.php' ) ); + $this->dataLong = file_get_contents(realpath(dirname(__FILE__) . '/../lib/crypt.php')); $this->dataShort = 'hats'; - $this->dataUrl = realpath( dirname( __FILE__ ) . '/../lib/crypt.php' ); - $this->legacyData = realpath( dirname( __FILE__ ) . '/legacy-text.txt' ); - $this->legacyEncryptedData = realpath( dirname( __FILE__ ) . '/legacy-encrypted-text.txt' ); + $this->dataUrl = realpath(dirname(__FILE__) . '/../lib/crypt.php'); + $this->legacyData = realpath(dirname(__FILE__) . '/legacy-text.txt'); + $this->legacyEncryptedData = realpath(dirname(__FILE__) . '/legacy-encrypted-text.txt'); $this->randomKey = Encryption\Crypt::generateKey(); $keypair = Encryption\Crypt::createKeypair(); $this->genPublicKey = $keypair['publicKey']; $this->genPrivateKey = $keypair['privateKey']; - $this->view = new \OC_FilesystemView( '/' ); + $this->view = new \OC_FilesystemView('/'); - \OC_User::setUserId( 'admin' ); + \OC_User::setUserId('admin'); $this->userId = 'admin'; $this->pass = 'admin'; - $userHome = \OC_User::getHome( $this->userId ); - $this->dataDir = str_replace( '/' . $this->userId, '', $userHome ); + $userHome = \OC_User::getHome($this->userId); + $this->dataDir = str_replace('/' . $this->userId, '', $userHome); // remember files_trashbin state - $this->stateFilesTrashbin = OC_App::isEnabled( 'files_trashbin' ); + $this->stateFilesTrashbin = OC_App::isEnabled('files_trashbin'); // we don't want to tests with app files_trashbin enabled - \OC_App::disable( 'files_trashbin' ); + \OC_App::disable('files_trashbin'); } function tearDown() { // reset app files_trashbin - if ( $this->stateFilesTrashbin ) { - OC_App::enable( 'files_trashbin' ); - } else { - OC_App::disable( 'files_trashbin' ); + if ($this->stateFilesTrashbin) { + OC_App::enable('files_trashbin'); + } + else { + OC_App::disable('files_trashbin'); } } @@ -105,31 +105,31 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase function testGetPrivateKey() { - $key = Encryption\Keymanager::getPrivateKey( $this->view, $this->userId ); + $key = Encryption\Keymanager::getPrivateKey($this->view, $this->userId); - $privateKey = Encryption\Crypt::symmetricDecryptFileContent( $key, $this->pass ); + $privateKey = Encryption\Crypt::symmetricDecryptFileContent($key, $this->pass); - $res = openssl_pkey_get_private( $privateKey ); + $res = openssl_pkey_get_private($privateKey); - $this->assertTrue( is_resource( $res ) ); + $this->assertTrue(is_resource($res)); - $sslInfo = openssl_pkey_get_details( $res ); + $sslInfo = openssl_pkey_get_details($res); - $this->assertArrayHasKey( 'key', $sslInfo ); + $this->assertArrayHasKey('key', $sslInfo); } function testGetPublicKey() { - $publiceKey = Encryption\Keymanager::getPublicKey( $this->view, $this->userId ); + $publiceKey = Encryption\Keymanager::getPublicKey($this->view, $this->userId); - $res = openssl_pkey_get_public( $publiceKey ); + $res = openssl_pkey_get_public($publiceKey); - $this->assertTrue( is_resource( $res ) ); + $this->assertTrue(is_resource($res)); - $sslInfo = openssl_pkey_get_details( $res ); + $sslInfo = openssl_pkey_get_details($res); - $this->assertArrayHasKey( 'key', $sslInfo ); + $this->assertArrayHasKey('key', $sslInfo); } function testSetFileKey() { @@ -137,7 +137,7 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase # NOTE: This cannot be tested until we are able to break out # of the FileSystemView data directory root - $key = Encryption\Crypt::symmetricEncryptFileContentKeyfile( $this->randomKey, 'hat' ); + $key = Encryption\Crypt::symmetricEncryptFileContentKeyfile($this->randomKey, 'hat'); $file = 'unittest-' . time() . '.txt'; @@ -145,20 +145,20 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; - $this->view->file_put_contents( $this->userId . '/files/' . $file, $key['encrypted'] ); + $this->view->file_put_contents($this->userId . '/files/' . $file, $key['encrypted']); // Re-enable proxy - our work is done \OC_FileProxy::$enabled = $proxyStatus; //$view = new \OC_FilesystemView( '/' . $this->userId . '/files_encryption/keyfiles' ); - Encryption\Keymanager::setFileKey( $this->view, $file, $this->userId, $key['key'] ); + Encryption\Keymanager::setFileKey($this->view, $file, $this->userId, $key['key']); // enable encryption proxy $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = true; // cleanup - $this->view->unlink( '/' . $this->userId . '/files/' . $file ); + $this->view->unlink('/' . $this->userId . '/files/' . $file); // change encryption proxy to previous state \OC_FileProxy::$enabled = $proxyStatus; @@ -167,25 +167,25 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase function testGetUserKeys() { - $keys = Encryption\Keymanager::getUserKeys( $this->view, $this->userId ); + $keys = Encryption\Keymanager::getUserKeys($this->view, $this->userId); - $resPublic = openssl_pkey_get_public( $keys['publicKey'] ); + $resPublic = openssl_pkey_get_public($keys['publicKey']); - $this->assertTrue( is_resource( $resPublic ) ); + $this->assertTrue(is_resource($resPublic)); - $sslInfoPublic = openssl_pkey_get_details( $resPublic ); + $sslInfoPublic = openssl_pkey_get_details($resPublic); - $this->assertArrayHasKey( 'key', $sslInfoPublic ); + $this->assertArrayHasKey('key', $sslInfoPublic); - $privateKey = Encryption\Crypt::symmetricDecryptFileContent( $keys['privateKey'], $this->pass ); + $privateKey = Encryption\Crypt::symmetricDecryptFileContent($keys['privateKey'], $this->pass); - $resPrivate = openssl_pkey_get_private( $privateKey ); + $resPrivate = openssl_pkey_get_private($privateKey); - $this->assertTrue( is_resource( $resPrivate ) ); + $this->assertTrue(is_resource($resPrivate)); - $sslInfoPrivate = openssl_pkey_get_details( $resPrivate ); + $sslInfoPrivate = openssl_pkey_get_details($resPrivate); - $this->assertArrayHasKey( 'key', $sslInfoPrivate ); + $this->assertArrayHasKey('key', $sslInfoPrivate); } function testFixPartialFilePath() { @@ -193,13 +193,13 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase $partFilename = 'testfile.txt.part'; $filename = 'testfile.txt'; - $this->assertTrue( Encryption\Keymanager::isPartialFilePath( $partFilename ) ); + $this->assertTrue(Encryption\Keymanager::isPartialFilePath($partFilename)); - $this->assertEquals( 'testfile.txt', Encryption\Keymanager::fixPartialFilePath( $partFilename ) ); + $this->assertEquals('testfile.txt', Encryption\Keymanager::fixPartialFilePath($partFilename)); - $this->assertFalse( Encryption\Keymanager::isPartialFilePath( $filename ) ); + $this->assertFalse(Encryption\Keymanager::isPartialFilePath($filename)); - $this->assertEquals( 'testfile.txt', Encryption\Keymanager::fixPartialFilePath( $filename ) ); + $this->assertEquals('testfile.txt', Encryption\Keymanager::fixPartialFilePath($filename)); } function testRecursiveDelShareKeys() { @@ -208,35 +208,36 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase $filename = '/tmp-' . time() . '.txt'; // create folder structure - $this->view->mkdir( '/admin/files/folder1' ); - $this->view->mkdir( '/admin/files/folder1/subfolder' ); - $this->view->mkdir( '/admin/files/folder1/subfolder/subsubfolder' ); + $this->view->mkdir('/admin/files/folder1'); + $this->view->mkdir('/admin/files/folder1/subfolder'); + $this->view->mkdir('/admin/files/folder1/subfolder/subsubfolder'); // enable encryption proxy $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = true; // save file with content - $cryptedFile = file_put_contents( 'crypt:///folder1/subfolder/subsubfolder/' . $filename, $this->dataShort ); + $cryptedFile = file_put_contents('crypt:///folder1/subfolder/subsubfolder/' . $filename, $this->dataShort); // test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); // change encryption proxy to previous state \OC_FileProxy::$enabled = $proxyStatus; // recursive delete keys - Encryption\Keymanager::delShareKey( $this->view, array( 'admin' ), '/folder1/' ); + Encryption\Keymanager::delShareKey($this->view, array('admin'), '/folder1/'); // check if share key not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys/folder1/subfolder/subsubfolder/' . $filename . '.admin.shareKey' ) ); + $this->assertFalse($this->view->file_exists( + '/admin/files_encryption/share-keys/folder1/subfolder/subsubfolder/' . $filename . '.admin.shareKey')); // enable encryption proxy $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = true; // cleanup - $this->view->unlink( '/admin/files/folder1' ); + $this->view->unlink('/admin/files/folder1'); // change encryption proxy to previous state \OC_FileProxy::$enabled = $proxyStatus; diff --git a/apps/files_encryption/tests/legacy-encrypted-text.txt b/apps/files_encryption/tests/legacy-encrypted-text.txt index d38cb7d1b0d..1f5087178cd 100644 --- a/apps/files_encryption/tests/legacy-encrypted-text.txt +++ b/apps/files_encryption/tests/legacy-encrypted-text.txt @@ -1 +1 @@ - «ß• ’tÕ.µ¤—dS@t9 øQJ \ No newline at end of file +ð˜¯5–¡‹Ç¡i›òë³Zg§ESlÁF=Àªð \ No newline at end of file diff --git a/apps/files_encryption/tests/share.php b/apps/files_encryption/tests/share.php index 0131ac88e72..6d92881ceb0 100755 --- a/apps/files_encryption/tests/share.php +++ b/apps/files_encryption/tests/share.php @@ -20,23 +20,29 @@ * */ -require_once realpath( dirname( __FILE__ ) . '/../3rdparty/Crypt_Blowfish/Blowfish.php' ); -require_once realpath( dirname( __FILE__ ) . '/../../../lib/base.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/crypt.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/keymanager.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/proxy.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/stream.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/util.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/helper.php' ); -require_once realpath( dirname( __FILE__ ) . '/../appinfo/app.php' ); +require_once realpath(dirname(__FILE__) . '/../3rdparty/Crypt_Blowfish/Blowfish.php'); +require_once realpath(dirname(__FILE__) . '/../../../lib/base.php'); +require_once realpath(dirname(__FILE__) . '/../lib/crypt.php'); +require_once realpath(dirname(__FILE__) . '/../lib/keymanager.php'); +require_once realpath(dirname(__FILE__) . '/../lib/proxy.php'); +require_once realpath(dirname(__FILE__) . '/../lib/stream.php'); +require_once realpath(dirname(__FILE__) . '/../lib/util.php'); +require_once realpath(dirname(__FILE__) . '/../lib/helper.php'); +require_once realpath(dirname(__FILE__) . '/../appinfo/app.php'); +require_once realpath(dirname(__FILE__) . '/util.php'); use OCA\Encryption; /** * Class Test_Encryption_Share */ -class Test_Encryption_Share extends \PHPUnit_Framework_TestCase -{ +class Test_Encryption_Share extends \PHPUnit_Framework_TestCase { + + const TEST_ENCRYPTION_SHARE_USER1 = "test-share-user1"; + const TEST_ENCRYPTION_SHARE_USER2 = "test-share-user2"; + const TEST_ENCRYPTION_SHARE_USER3 = "test-share-user3"; + const TEST_ENCRYPTION_SHARE_USER4 = "test-share-user4"; + const TEST_ENCRYPTION_SHARE_GROUP1 = "test-share-group1"; public $stateFilesTrashbin; public $filename; @@ -52,15 +58,15 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase public static function setUpBeforeClass() { // reset backend \OC_User::clearBackends(); - \OC_User::useBackend( 'database' ); + \OC_User::useBackend('database'); // enable resharing - \OC_Appconfig::setValue( 'core', 'shareapi_allow_resharing', 'yes' ); + \OC_Appconfig::setValue('core', 'shareapi_allow_resharing', 'yes'); // clear share hooks - \OC_Hook::clear( 'OCP\\Share' ); + \OC_Hook::clear('OCP\\Share'); \OC::registerShareHooks(); - \OCP\Util::connectHook( 'OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup' ); + \OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup'); // Sharing related hooks \OCA\Encryption\Helper::registerShareHooks(); @@ -70,25 +76,23 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase // clear and register hooks \OC_FileProxy::clearProxies(); - \OC_FileProxy::register( new OCA\Encryption\Proxy() ); + \OC_FileProxy::register(new OCA\Encryption\Proxy()); // create users - \Test_Encryption_Share::loginHelper( 'user1', true ); - \Test_Encryption_Share::loginHelper( 'user2', true ); - \Test_Encryption_Share::loginHelper( 'user3', true ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1, true); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, true); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3, true); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4, true); // create group and assign users - \OC_Group::createGroup( 'group1' ); - \OC_Group::addToGroup( 'user2', 'group1' ); - \OC_Group::addToGroup( 'user3', 'group1' ); + \OC_Group::createGroup(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1); + \OC_Group::addToGroup(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1); + \OC_Group::addToGroup(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1); } function setUp() { $this->dataShort = 'hats'; - $this->view = new \OC_FilesystemView( '/' ); - - $userHome = \OC_User::getHome( 'admin' ); - $this->dataDir = str_replace( '/admin', '', $userHome ); + $this->view = new \OC_FilesystemView('/'); $this->folder1 = '/folder1'; $this->subfolder = '/subfolder1'; @@ -97,154 +101,176 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase $this->filename = 'share-tmp.test'; // we don't want to tests with app files_trashbin enabled - \OC_App::disable( 'files_trashbin' ); + \OC_App::disable('files_trashbin'); // remember files_trashbin state - $this->stateFilesTrashbin = OC_App::isEnabled( 'files_trashbin' ); + $this->stateFilesTrashbin = OC_App::isEnabled('files_trashbin'); } function tearDown() { // reset app files_trashbin - if ( $this->stateFilesTrashbin ) { - OC_App::enable( 'files_trashbin' ); - } else { - OC_App::disable( 'files_trashbin' ); + if ($this->stateFilesTrashbin) { + OC_App::enable('files_trashbin'); + } + else { + OC_App::disable('files_trashbin'); } } public static function tearDownAfterClass() { // clean group - \OC_Group::deleteGroup( 'group1' ); + \OC_Group::deleteGroup(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1); // cleanup users - \OC_User::deleteUser( 'user1' ); - \OC_User::deleteUser( 'user2' ); - \OC_User::deleteUser( 'user3' ); + \OC_User::deleteUser(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); + \OC_User::deleteUser(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2); + \OC_User::deleteUser(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3); + \OC_User::deleteUser(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4); } /** * @param bool $withTeardown */ - function testShareFile( $withTeardown = true ) { + function testShareFile($withTeardown = true) { // login as admin - $this->loginHelper( 'admin' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); // save file with content - $cryptedFile = file_put_contents( 'crypt://' . $this->filename, $this->dataShort ); + $cryptedFile = file_put_contents('crypt://' . $this->filename, $this->dataShort); // test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); // disable encryption proxy to prevent recursive calls $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; // get the file info from previous created file - $fileInfo = $this->view->getFileInfo( '/admin/files/' . $this->filename ); + $fileInfo = $this->view->getFileInfo( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename); // check if we have a valid file info - $this->assertTrue( is_array( $fileInfo ) ); + $this->assertTrue(is_array($fileInfo)); // check if the unencrypted file size is stored - $this->assertGreaterThan( 0, $fileInfo['unencrypted_size'] ); + $this->assertGreaterThan(0, $fileInfo['unencrypted_size']); // re-enable the file proxy \OC_FileProxy::$enabled = $proxyStatus; // share the file - \OCP\Share::shareItem( 'file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, 'user1', OCP\PERMISSION_ALL ); + \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, OCP\PERMISSION_ALL); // login as admin - $this->loginHelper( 'admin' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); // check if share key for user1 exists - $this->assertTrue( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->filename . '.user1.shareKey' ) ); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey')); // login as user1 - $this->loginHelper( 'user1' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2); // get file contents - $retrievedCryptedFile = $this->view->file_get_contents( '/user1/files/Shared/' . $this->filename ); + $retrievedCryptedFile = $this->view->file_get_contents( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/Shared/' . $this->filename); // check if data is the same as we previously written - $this->assertEquals( $this->dataShort, $retrievedCryptedFile ); + $this->assertEquals($this->dataShort, $retrievedCryptedFile); // cleanup - if ( $withTeardown ) { + if ($withTeardown) { // login as admin - $this->loginHelper( 'admin' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); // unshare the file - \OCP\Share::unshare( 'file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, 'user1' ); + \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2); // check if share key not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->filename . '.user1.shareKey' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey')); // cleanup - $this->view->unlink( '/admin/files/' . $this->filename ); + $this->view->unlink( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename); // check if share key not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->filename . '.admin.shareKey' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey')); } } /** * @param bool $withTeardown */ - function testReShareFile( $withTeardown = true ) { - $this->testShareFile( false ); + function testReShareFile($withTeardown = true) { + $this->testShareFile(false); // login as user1 - $this->loginHelper( 'user1' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2); // get the file info - $fileInfo = $this->view->getFileInfo( '/user1/files/Shared/' . $this->filename ); + $fileInfo = $this->view->getFileInfo( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/Shared/' . $this->filename); // share the file with user2 - \OCP\Share::shareItem( 'file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, 'user2', OCP\PERMISSION_ALL ); + \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3, OCP\PERMISSION_ALL); // login as admin - $this->loginHelper( 'admin' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); // check if share key for user2 exists - $this->assertTrue( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->filename . '.user2.shareKey' ) ); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey')); // login as user2 - $this->loginHelper( 'user2' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3); // get file contents - $retrievedCryptedFile = $this->view->file_get_contents( '/user2/files/Shared/' . $this->filename ); + $retrievedCryptedFile = $this->view->file_get_contents( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '/files/Shared/' . $this->filename); // check if data is the same as previously written - $this->assertEquals( $this->dataShort, $retrievedCryptedFile ); + $this->assertEquals($this->dataShort, $retrievedCryptedFile); // cleanup - if ( $withTeardown ) { + if ($withTeardown) { // login as user1 - $this->loginHelper( 'user1' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2); // unshare the file with user2 - \OCP\Share::unshare( 'file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, 'user2' ); + \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3); // login as admin - $this->loginHelper( 'admin' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); // check if share key not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->filename . '.user2.shareKey' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey')); // unshare the file with user1 - \OCP\Share::unshare( 'file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, 'user1' ); + \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2); // check if share key not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->filename . '.user1.shareKey' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey')); // cleanup - $this->view->unlink( '/admin/files/' . $this->filename ); + $this->view->unlink( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename); // check if share key not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->filename . '.admin.shareKey' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey')); } } @@ -252,69 +278,85 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase * @param bool $withTeardown * @return array */ - function testShareFolder( $withTeardown = true ) { + function testShareFolder($withTeardown = true) { // login as admin - $this->loginHelper( 'admin' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); // create folder structure - $this->view->mkdir( '/admin/files' . $this->folder1 ); - $this->view->mkdir( '/admin/files' . $this->folder1 . $this->subfolder ); - $this->view->mkdir( '/admin/files' . $this->folder1 . $this->subfolder . $this->subsubfolder ); + $this->view->mkdir('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1); + $this->view->mkdir( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1 . $this->subfolder); + $this->view->mkdir( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1 . $this->subfolder + . $this->subsubfolder); // save file with content - $cryptedFile = file_put_contents( 'crypt://' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename, $this->dataShort ); + $cryptedFile = file_put_contents('crypt://' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' + . $this->filename, $this->dataShort); // test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); // disable encryption proxy to prevent recursive calls $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; // get the file info from previous created folder - $fileInfo = $this->view->getFileInfo( '/admin/files' . $this->folder1 ); + $fileInfo = $this->view->getFileInfo( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1); // check if we have a valid file info - $this->assertTrue( is_array( $fileInfo ) ); + $this->assertTrue(is_array($fileInfo)); // re-enable the file proxy \OC_FileProxy::$enabled = $proxyStatus; // share the folder with user1 - \OCP\Share::shareItem( 'folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, 'user1', OCP\PERMISSION_ALL ); + \OCP\Share::shareItem('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, OCP\PERMISSION_ALL); // login as admin - $this->loginHelper( 'admin' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); // check if share key for user1 exists - $this->assertTrue( $this->view->file_exists( '/admin/files_encryption/share-keys' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename . '.user1.shareKey' ) ); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys' . $this->folder1 + . $this->subfolder . $this->subsubfolder . '/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey')); // login as user1 - $this->loginHelper( 'user1' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2); // get file contents - $retrievedCryptedFile = $this->view->file_get_contents( '/user1/files/Shared' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename ); + $retrievedCryptedFile = $this->view->file_get_contents( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/Shared' . $this->folder1 + . $this->subfolder . $this->subsubfolder . '/' . $this->filename); // check if data is the same - $this->assertEquals( $this->dataShort, $retrievedCryptedFile ); + $this->assertEquals($this->dataShort, $retrievedCryptedFile); // cleanup - if ( $withTeardown ) { + if ($withTeardown) { // login as admin - $this->loginHelper( 'admin' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); // unshare the folder with user1 - \OCP\Share::unshare( 'folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, 'user1' ); + \OCP\Share::unshare('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2); // check if share key not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename . '.user1.shareKey' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys' + . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey')); // cleanup - $this->view->unlink( '/admin/files' . $this->folder1 ); + $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1); // check if share key not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename . '.admin.shareKey' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys' + . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey')); } return $fileInfo; @@ -323,462 +365,547 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase /** * @param bool $withTeardown */ - function testReShareFolder( $withTeardown = true ) { - $fileInfoFolder1 = $this->testShareFolder( false ); + function testReShareFolder($withTeardown = true) { + $fileInfoFolder1 = $this->testShareFolder(false); // login as user1 - $this->loginHelper( 'user1' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2); // disable encryption proxy to prevent recursive calls $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; // get the file info from previous created folder - $fileInfoSubFolder = $this->view->getFileInfo( '/user1/files/Shared' . $this->folder1 . $this->subfolder ); + $fileInfoSubFolder = $this->view->getFileInfo( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/Shared' . $this->folder1 + . $this->subfolder); // check if we have a valid file info - $this->assertTrue( is_array( $fileInfoSubFolder ) ); + $this->assertTrue(is_array($fileInfoSubFolder)); // re-enable the file proxy \OC_FileProxy::$enabled = $proxyStatus; // share the file with user2 - \OCP\Share::shareItem( 'folder', $fileInfoSubFolder['fileid'], \OCP\Share::SHARE_TYPE_USER, 'user2', OCP\PERMISSION_ALL ); + \OCP\Share::shareItem('folder', $fileInfoSubFolder['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3, OCP\PERMISSION_ALL); // login as admin - $this->loginHelper( 'admin' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); // check if share key for user2 exists - $this->assertTrue( $this->view->file_exists( '/admin/files_encryption/share-keys' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename . '.user2.shareKey' ) ); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys' . $this->folder1 + . $this->subfolder . $this->subsubfolder . '/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey')); // login as user2 - $this->loginHelper( 'user2' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3); // get file contents - $retrievedCryptedFile = $this->view->file_get_contents( '/user2/files/Shared' . $this->subfolder . $this->subsubfolder . '/' . $this->filename ); + $retrievedCryptedFile = $this->view->file_get_contents( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '/files/Shared' . $this->subfolder + . $this->subsubfolder . '/' . $this->filename); // check if data is the same - $this->assertEquals( $this->dataShort, $retrievedCryptedFile ); + $this->assertEquals($this->dataShort, $retrievedCryptedFile); // get the file info - $fileInfo = $this->view->getFileInfo( '/user2/files/Shared' . $this->subfolder . $this->subsubfolder . '/' . $this->filename ); + $fileInfo = $this->view->getFileInfo( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '/files/Shared' . $this->subfolder + . $this->subsubfolder . '/' . $this->filename); // check if we have fileInfos - $this->assertTrue( is_array( $fileInfo ) ); + $this->assertTrue(is_array($fileInfo)); // share the file with user3 - \OCP\Share::shareItem( 'file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, 'user3', OCP\PERMISSION_ALL ); + \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4, OCP\PERMISSION_ALL); // login as admin - $this->loginHelper( 'admin' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); // check if share key for user3 exists - $this->assertTrue( $this->view->file_exists( '/admin/files_encryption/share-keys' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename . '.user3.shareKey' ) ); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys' . $this->folder1 + . $this->subfolder . $this->subsubfolder . '/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey')); // login as user3 - $this->loginHelper( 'user3' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4); // get file contents - $retrievedCryptedFile = $this->view->file_get_contents( '/user3/files/Shared/' . $this->filename ); + $retrievedCryptedFile = $this->view->file_get_contents( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4 . '/files/Shared/' . $this->filename); // check if data is the same - $this->assertEquals( $this->dataShort, $retrievedCryptedFile ); + $this->assertEquals($this->dataShort, $retrievedCryptedFile); // cleanup - if ( $withTeardown ) { + if ($withTeardown) { // login as user2 - $this->loginHelper( 'user2' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3); // unshare the file with user3 - \OCP\Share::unshare( 'file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, 'user3' ); + \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4); // check if share key not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename . '.user3.shareKey' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys' + . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey')); // login as user1 - $this->loginHelper( 'user1' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2); // unshare the folder with user2 - \OCP\Share::unshare( 'folder', $fileInfoSubFolder['fileid'], \OCP\Share::SHARE_TYPE_USER, 'user2' ); + \OCP\Share::unshare('folder', $fileInfoSubFolder['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3); // check if share key not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename . '.user2.shareKey' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys' + . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey')); // login as admin - $this->loginHelper( 'admin' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); // unshare the folder1 with user1 - \OCP\Share::unshare( 'folder', $fileInfoFolder1['fileid'], \OCP\Share::SHARE_TYPE_USER, 'user1' ); + \OCP\Share::unshare('folder', $fileInfoFolder1['fileid'], \OCP\Share::SHARE_TYPE_USER, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2); // check if share key not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename . '.user1.shareKey' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys' + . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey')); // cleanup - $this->view->unlink( '/admin/files' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename ); + $this->view->unlink( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1 . $this->subfolder + . $this->subsubfolder . '/' . $this->filename); // check if share key not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename . '.admin.shareKey' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys' + . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey')); } } function testPublicShareFile() { // login as admin - $this->loginHelper( 'admin' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); // save file with content - $cryptedFile = file_put_contents( 'crypt://' . $this->filename, $this->dataShort ); + $cryptedFile = file_put_contents('crypt://' . $this->filename, $this->dataShort); // test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); // disable encryption proxy to prevent recursive calls $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; // get the file info from previous created file - $fileInfo = $this->view->getFileInfo( '/admin/files/' . $this->filename ); + $fileInfo = $this->view->getFileInfo( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename); // check if we have a valid file info - $this->assertTrue( is_array( $fileInfo ) ); + $this->assertTrue(is_array($fileInfo)); // check if the unencrypted file size is stored - $this->assertGreaterThan( 0, $fileInfo['unencrypted_size'] ); + $this->assertGreaterThan(0, $fileInfo['unencrypted_size']); // re-enable the file proxy \OC_FileProxy::$enabled = $proxyStatus; // share the file - \OCP\Share::shareItem( 'file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_LINK, false, OCP\PERMISSION_ALL ); + \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_LINK, false, OCP\PERMISSION_ALL); // login as admin - $this->loginHelper( 'admin' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); - $publicShareKeyId = \OC_Appconfig::getValue( 'files_encryption', 'publicShareKeyId' ); + $publicShareKeyId = \OC_Appconfig::getValue('files_encryption', 'publicShareKeyId'); // check if share key for public exists - $this->assertTrue( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->filename . '.' . $publicShareKeyId . '.shareKey' ) ); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' + . $this->filename . '.' . $publicShareKeyId . '.shareKey')); // some hacking to simulate public link $GLOBALS['app'] = 'files_sharing'; - $GLOBALS['fileOwner'] = 'admin'; - \OC_User::setUserId( '' ); + $GLOBALS['fileOwner'] = \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1; + \OC_User::setUserId(''); // get file contents - $retrievedCryptedFile = file_get_contents( 'crypt://' . $this->filename ); + $retrievedCryptedFile = file_get_contents('crypt://' . $this->filename); // check if data is the same as we previously written - $this->assertEquals( $this->dataShort, $retrievedCryptedFile ); + $this->assertEquals($this->dataShort, $retrievedCryptedFile); // tear down // login as admin - $this->loginHelper( 'admin' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); // unshare the file - \OCP\Share::unshare( 'file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_LINK, null ); + \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_LINK, null); // check if share key not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->filename . '.' . $publicShareKeyId . '.shareKey' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' + . $this->filename . '.' . $publicShareKeyId . '.shareKey')); // cleanup - $this->view->unlink( '/admin/files/' . $this->filename ); + $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename); // check if share key not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->filename . '.admin.shareKey' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey')); } function testShareFileWithGroup() { // login as admin - $this->loginHelper( 'admin' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); // save file with content - $cryptedFile = file_put_contents( 'crypt://' . $this->filename, $this->dataShort ); + $cryptedFile = file_put_contents('crypt://' . $this->filename, $this->dataShort); // test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); // disable encryption proxy to prevent recursive calls $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; // get the file info from previous created file - $fileInfo = $this->view->getFileInfo( '/admin/files/' . $this->filename ); + $fileInfo = $this->view->getFileInfo( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename); // check if we have a valid file info - $this->assertTrue( is_array( $fileInfo ) ); + $this->assertTrue(is_array($fileInfo)); // check if the unencrypted file size is stored - $this->assertGreaterThan( 0, $fileInfo['unencrypted_size'] ); + $this->assertGreaterThan(0, $fileInfo['unencrypted_size']); // re-enable the file proxy \OC_FileProxy::$enabled = $proxyStatus; // share the file - \OCP\Share::shareItem( 'file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, 'group1', OCP\PERMISSION_ALL ); + \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1, OCP\PERMISSION_ALL); // login as admin - $this->loginHelper( 'admin' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); // check if share key for user2 and user3 exists - $this->assertTrue( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->filename . '.user2.shareKey' ) ); - $this->assertTrue( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->filename . '.user3.shareKey' ) ); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey')); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey')); // login as user1 - $this->loginHelper( 'user2' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3); // get file contents - $retrievedCryptedFile = $this->view->file_get_contents( '/user2/files/Shared/' . $this->filename ); + $retrievedCryptedFile = $this->view->file_get_contents( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '/files/Shared/' . $this->filename); // check if data is the same as we previously written - $this->assertEquals( $this->dataShort, $retrievedCryptedFile ); + $this->assertEquals($this->dataShort, $retrievedCryptedFile); // login as admin - $this->loginHelper( 'admin' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); // unshare the file - \OCP\Share::unshare( 'file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, 'group1' ); + \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1); // check if share key not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->filename . '.user2.shareKey' ) ); - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->filename . '.user3.shareKey' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey')); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER4 . '.shareKey')); // cleanup - $this->view->unlink( '/admin/files/' . $this->filename ); + $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename); // check if share key not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->filename . '.admin.shareKey' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey')); } function testRecoveryFile() { // login as admin - $this->loginHelper( 'admin' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); - \OCA\Encryption\Helper::adminEnableRecovery( null, 'test123' ); - $recoveryKeyId = OC_Appconfig::getValue( 'files_encryption', 'recoveryKeyId' ); + \OCA\Encryption\Helper::adminEnableRecovery(null, 'test123'); + $recoveryKeyId = OC_Appconfig::getValue('files_encryption', 'recoveryKeyId'); // check if control file created - $this->assertTrue( $this->view->file_exists( '/control-file/controlfile.enc' ) ); + $this->assertTrue($this->view->file_exists('/control-file/controlfile.enc')); // login as admin - $this->loginHelper( 'admin' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); - $util = new \OCA\Encryption\Util( new \OC_FilesystemView( '/' ), 'admin' ); + $util = new \OCA\Encryption\Util(new \OC_FilesystemView('/'), \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); // check if recovery password match - $this->assertTrue( $util->checkRecoveryPassword( 'test123' ) ); + $this->assertTrue($util->checkRecoveryPassword('test123')); // enable recovery for admin - $this->assertTrue( $util->setRecoveryForUser( 1 ) ); + $this->assertTrue($util->setRecoveryForUser(1)); // create folder structure - $this->view->mkdir( '/admin/files' . $this->folder1 ); - $this->view->mkdir( '/admin/files' . $this->folder1 . $this->subfolder ); - $this->view->mkdir( '/admin/files' . $this->folder1 . $this->subfolder . $this->subsubfolder ); + $this->view->mkdir('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1); + $this->view->mkdir( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1 . $this->subfolder); + $this->view->mkdir( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files' . $this->folder1 . $this->subfolder + . $this->subsubfolder); // save file with content - $cryptedFile1 = file_put_contents( 'crypt://' . $this->filename, $this->dataShort ); - $cryptedFile2 = file_put_contents( 'crypt://' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename, $this->dataShort ); + $cryptedFile1 = file_put_contents('crypt://' . $this->filename, $this->dataShort); + $cryptedFile2 = file_put_contents('crypt://' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' + . $this->filename, $this->dataShort); // test that data was successfully written - $this->assertTrue( is_int( $cryptedFile1 ) ); - $this->assertTrue( is_int( $cryptedFile2 ) ); + $this->assertTrue(is_int($cryptedFile1)); + $this->assertTrue(is_int($cryptedFile2)); // check if share key for admin and recovery exists - $this->assertTrue( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->filename . '.admin.shareKey' ) ); - $this->assertTrue( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->filename . '.' . $recoveryKeyId . '.shareKey' ) ); - $this->assertTrue( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename . '.admin.shareKey' ) ); - $this->assertTrue( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename . '.' . $recoveryKeyId . '.shareKey' ) ); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey')); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' + . $this->filename . '.' . $recoveryKeyId . '.shareKey')); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' . $this->folder1 + . $this->subfolder . $this->subsubfolder . '/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '.shareKey')); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' . $this->folder1 + . $this->subfolder . $this->subsubfolder . '/' + . $this->filename . '.' . $recoveryKeyId . '.shareKey')); // disable recovery for admin - $this->assertTrue( $util->setRecoveryForUser( 0 ) ); + $this->assertTrue($util->setRecoveryForUser(0)); // remove all recovery keys - $util->removeRecoveryKeys( '/' ); + $util->removeRecoveryKeys('/'); // check if share key for recovery not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->filename . '.' . $recoveryKeyId . '.shareKey' ) ); - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename . '.' . $recoveryKeyId . '.shareKey' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' + . $this->filename . '.' . $recoveryKeyId . '.shareKey')); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' . $this->folder1 + . $this->subfolder . $this->subsubfolder . '/' + . $this->filename . '.' . $recoveryKeyId . '.shareKey')); // enable recovery for admin - $this->assertTrue( $util->setRecoveryForUser( 1 ) ); + $this->assertTrue($util->setRecoveryForUser(1)); // remove all recovery keys - $util->addRecoveryKeys( '/' ); + $util->addRecoveryKeys('/'); // check if share key for admin and recovery exists - $this->assertTrue( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->filename . '.' . $recoveryKeyId . '.shareKey' ) ); - $this->assertTrue( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename . '.' . $recoveryKeyId . '.shareKey' ) ); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' + . $this->filename . '.' . $recoveryKeyId . '.shareKey')); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' . $this->folder1 + . $this->subfolder . $this->subsubfolder . '/' + . $this->filename . '.' . $recoveryKeyId . '.shareKey')); // cleanup - $this->view->unlink( '/admin/files/' . $this->filename ); - $this->view->unlink( '/admin/files/' . $this->folder1 ); + $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename); + $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->folder1); // check if share key for recovery not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->filename . '.' . $recoveryKeyId . '.shareKey' ) ); - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename . '.' . $recoveryKeyId . '.shareKey' ) ); - - $this->assertTrue( \OCA\Encryption\Helper::adminEnableRecovery( null, 'test123' ) ); - $this->assertTrue( \OCA\Encryption\Helper::adminDisableRecovery( 'test123' ) ); - $this->assertEquals( 0, \OC_Appconfig::getValue( 'files_encryption', 'recoveryAdminEnabled' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' + . $this->filename . '.' . $recoveryKeyId . '.shareKey')); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' . $this->folder1 + . $this->subfolder . $this->subsubfolder . '/' + . $this->filename . '.' . $recoveryKeyId . '.shareKey')); + + $this->assertTrue(\OCA\Encryption\Helper::adminEnableRecovery(null, 'test123')); + $this->assertTrue(\OCA\Encryption\Helper::adminDisableRecovery('test123')); + $this->assertEquals(0, \OC_Appconfig::getValue('files_encryption', 'recoveryAdminEnabled')); } function testRecoveryForUser() { // login as admin - $this->loginHelper( 'admin' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); - \OCA\Encryption\Helper::adminEnableRecovery( null, 'test123' ); - $recoveryKeyId = OC_Appconfig::getValue( 'files_encryption', 'recoveryKeyId' ); + \OCA\Encryption\Helper::adminEnableRecovery(null, 'test123'); + $recoveryKeyId = OC_Appconfig::getValue('files_encryption', 'recoveryKeyId'); // check if control file created - $this->assertTrue( $this->view->file_exists( '/control-file/controlfile.enc' ) ); + $this->assertTrue($this->view->file_exists('/control-file/controlfile.enc')); // login as user1 - $this->loginHelper( 'user1' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2); - $util = new \OCA\Encryption\Util( new \OC_FilesystemView( '/' ), 'user1' ); + $util = new \OCA\Encryption\Util(new \OC_FilesystemView('/'), \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2); // enable recovery for admin - $this->assertTrue( $util->setRecoveryForUser( 1 ) ); + $this->assertTrue($util->setRecoveryForUser(1)); // create folder structure - $this->view->mkdir( '/user1/files' . $this->folder1 ); - $this->view->mkdir( '/user1/files' . $this->folder1 . $this->subfolder ); - $this->view->mkdir( '/user1/files' . $this->folder1 . $this->subfolder . $this->subsubfolder ); + $this->view->mkdir('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->folder1); + $this->view->mkdir( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->folder1 . $this->subfolder); + $this->view->mkdir( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->folder1 . $this->subfolder + . $this->subsubfolder); // save file with content - $cryptedFile1 = file_put_contents( 'crypt://' . $this->filename, $this->dataShort ); - $cryptedFile2 = file_put_contents( 'crypt://' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename, $this->dataShort ); + $cryptedFile1 = file_put_contents('crypt://' . $this->filename, $this->dataShort); + $cryptedFile2 = file_put_contents('crypt://' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' + . $this->filename, $this->dataShort); // test that data was successfully written - $this->assertTrue( is_int( $cryptedFile1 ) ); - $this->assertTrue( is_int( $cryptedFile2 ) ); + $this->assertTrue(is_int($cryptedFile1)); + $this->assertTrue(is_int($cryptedFile2)); // check if share key for user and recovery exists - $this->assertTrue( $this->view->file_exists( '/user1/files_encryption/share-keys/' . $this->filename . '.user1.shareKey' ) ); - $this->assertTrue( $this->view->file_exists( '/user1/files_encryption/share-keys/' . $this->filename . '.' . $recoveryKeyId . '.shareKey' ) ); - $this->assertTrue( $this->view->file_exists( '/user1/files_encryption/share-keys/' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename . '.user1.shareKey' ) ); - $this->assertTrue( $this->view->file_exists( '/user1/files_encryption/share-keys/' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename . '.' . $recoveryKeyId . '.shareKey' ) ); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey')); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/' + . $this->filename . '.' . $recoveryKeyId . '.shareKey')); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/' . $this->folder1 + . $this->subfolder . $this->subsubfolder . '/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey')); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/' . $this->folder1 + . $this->subfolder . $this->subsubfolder . '/' + . $this->filename . '.' . $recoveryKeyId . '.shareKey')); // login as admin - $this->loginHelper( 'admin' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); // change password - \OC_User::setPassword( 'user1', 'test', 'test123' ); + \OC_User::setPassword(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, 'test', 'test123'); // login as user1 - $this->loginHelper( 'user1', false, 'test' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, false, 'test'); // get file contents - $retrievedCryptedFile1 = file_get_contents( 'crypt://' . $this->filename ); - $retrievedCryptedFile2 = file_get_contents( 'crypt://' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename ); + $retrievedCryptedFile1 = file_get_contents('crypt://' . $this->filename); + $retrievedCryptedFile2 = file_get_contents( + 'crypt://' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename); // check if data is the same as we previously written - $this->assertEquals( $this->dataShort, $retrievedCryptedFile1 ); - $this->assertEquals( $this->dataShort, $retrievedCryptedFile2 ); + $this->assertEquals($this->dataShort, $retrievedCryptedFile1); + $this->assertEquals($this->dataShort, $retrievedCryptedFile2); // cleanup - $this->view->unlink( '/user1/files' . $this->folder1 ); - $this->view->unlink( '/user1/files' . $this->filename ); + $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->folder1); + $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->filename); // check if share key for user and recovery exists - $this->assertFalse( $this->view->file_exists( '/user1/files_encryption/share-keys/' . $this->filename . '.user1.shareKey' ) ); - $this->assertFalse( $this->view->file_exists( '/user1/files_encryption/share-keys/' . $this->filename . '.' . $recoveryKeyId . '.shareKey' ) ); - $this->assertFalse( $this->view->file_exists( '/user1/files_encryption/share-keys/' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename . '.user1.shareKey' ) ); - $this->assertFalse( $this->view->file_exists( '/user1/files_encryption/share-keys/' . $this->folder1 . $this->subfolder . $this->subsubfolder . '/' . $this->filename . '.' . $recoveryKeyId . '.shareKey' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey')); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/' + . $this->filename . '.' . $recoveryKeyId . '.shareKey')); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/' . $this->folder1 + . $this->subfolder . $this->subsubfolder . '/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '.shareKey')); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files_encryption/share-keys/' . $this->folder1 + . $this->subfolder . $this->subsubfolder . '/' + . $this->filename . '.' . $recoveryKeyId . '.shareKey')); // enable recovery for admin - $this->assertTrue( $util->setRecoveryForUser( 0 ) ); + $this->assertTrue($util->setRecoveryForUser(0)); - \OCA\Encryption\Helper::adminDisableRecovery( 'test123' ); - $this->assertEquals( 0, \OC_Appconfig::getValue( 'files_encryption', 'recoveryAdminEnabled' ) ); + \OCA\Encryption\Helper::adminDisableRecovery('test123'); + $this->assertEquals(0, \OC_Appconfig::getValue('files_encryption', 'recoveryAdminEnabled')); } function testFailShareFile() { // login as admin - $this->loginHelper( 'admin' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); // save file with content - $cryptedFile = file_put_contents( 'crypt://' . $this->filename, $this->dataShort ); + $cryptedFile = file_put_contents('crypt://' . $this->filename, $this->dataShort); // test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); // disable encryption proxy to prevent recursive calls $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; // get the file info from previous created file - $fileInfo = $this->view->getFileInfo( '/admin/files/' . $this->filename ); + $fileInfo = $this->view->getFileInfo( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename); // check if we have a valid file info - $this->assertTrue( is_array( $fileInfo ) ); + $this->assertTrue(is_array($fileInfo)); // check if the unencrypted file size is stored - $this->assertGreaterThan( 0, $fileInfo['unencrypted_size'] ); + $this->assertGreaterThan(0, $fileInfo['unencrypted_size']); // break users public key - $this->view->rename( '/public-keys/user2.public.key', '/public-keys/user2.public.key_backup' ); + $this->view->rename('/public-keys/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.public.key', + '/public-keys/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.public.key_backup'); // re-enable the file proxy \OC_FileProxy::$enabled = $proxyStatus; // share the file - \OCP\Share::shareItem( 'file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, 'group1', OCP\PERMISSION_ALL ); + \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1, OCP\PERMISSION_ALL); // login as admin - $this->loginHelper( 'admin' ); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); // check if share key for user1 not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->filename . '.user2.shareKey' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey')); // disable encryption proxy to prevent recursive calls $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; // break user1 public key - $this->view->rename( '/public-keys/user2.public.key_backup', '/public-keys/user2.public.key' ); + $this->view->rename( + '/public-keys/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.public.key_backup', + '/public-keys/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.public.key'); // remove share file - $this->view->unlink( '/admin/files_encryption/share-keys/' . $this->filename . '.user2.shareKey' ); + $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 + . '.shareKey'); // re-enable the file proxy \OC_FileProxy::$enabled = $proxyStatus; // unshare the file with user1 - \OCP\Share::unshare( 'file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, 'group1' ); + \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_GROUP1); // check if share key not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $this->filename . '.user2.shareKey' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER3 . '.shareKey')); // cleanup - $this->view->unlink( '/admin/files/' . $this->filename ); + $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1 . '/files/' . $this->filename); } - - /** - * @param $user - * @param bool $create - * @param bool $password - */ - public static function loginHelper( $user, $create = false, $password = false ) { - if ( $create ) { - \OC_User::createUser( $user, $user ); - } - - if ( $password === false ) { - $password = $user; - } - - \OC_Util::tearDownFS(); - \OC_User::setUserId( '' ); - \OC\Files\Filesystem::tearDown(); - \OC_Util::setupFS( $user ); - \OC_User::setUserId( $user ); - - $params['uid'] = $user; - $params['password'] = $password; - OCA\Encryption\Hooks::login( $params ); - } } diff --git a/apps/files_encryption/tests/stream.php b/apps/files_encryption/tests/stream.php index 59b310c7ac8..3d978767542 100644 --- a/apps/files_encryption/tests/stream.php +++ b/apps/files_encryption/tests/stream.php @@ -20,13 +20,14 @@ * */ -require_once realpath( dirname( __FILE__ ) . '/../../../lib/base.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/crypt.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/keymanager.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/proxy.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/stream.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/util.php' ); -require_once realpath( dirname( __FILE__ ) . '/../appinfo/app.php' ); +require_once realpath(dirname(__FILE__) . '/../../../lib/base.php'); +require_once realpath(dirname(__FILE__) . '/../lib/crypt.php'); +require_once realpath(dirname(__FILE__) . '/../lib/keymanager.php'); +require_once realpath(dirname(__FILE__) . '/../lib/proxy.php'); +require_once realpath(dirname(__FILE__) . '/../lib/stream.php'); +require_once realpath(dirname(__FILE__) . '/../lib/util.php'); +require_once realpath(dirname(__FILE__) . '/../appinfo/app.php'); +require_once realpath(dirname(__FILE__) . '/util.php'); use OCA\Encryption; @@ -34,8 +35,9 @@ use OCA\Encryption; * Class Test_Encryption_Stream * @brief this class provide basic stream tests */ -class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase -{ +class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase { + + const TEST_ENCRYPTION_STREAM_USER1 = "test-stream-user1"; public $userId; public $pass; @@ -49,138 +51,130 @@ class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase public static function setUpBeforeClass() { // reset backend \OC_User::clearBackends(); - \OC_User::useBackend( 'database' ); + \OC_User::useBackend('database'); // Filesystem related hooks \OCA\Encryption\Helper::registerFilesystemHooks(); // clear and register hooks \OC_FileProxy::clearProxies(); - \OC_FileProxy::register( new OCA\Encryption\Proxy() ); - - // setup filesystem - \OC_Util::tearDownFS(); - \OC_User::setUserId( '' ); - \OC\Files\Filesystem::tearDown(); - \OC_Util::setupFS( 'admin' ); - \OC_User::setUserId( 'admin' ); - - // login admin - $params['uid'] = 'admin'; - $params['password'] = 'admin'; - OCA\Encryption\Hooks::login( $params ); + \OC_FileProxy::register(new OCA\Encryption\Proxy()); + // create test user + \Test_Encryption_Util::loginHelper(\Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1, true); } function setUp() { // set user id - \OC_User::setUserId( 'admin' ); - $this->userId = 'admin'; - $this->pass = 'admin'; + \OC_User::setUserId(\Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1); + $this->userId = \Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1; + $this->pass = \Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1; // init filesystem view - $this->view = new \OC_FilesystemView( '/' ); + $this->view = new \OC_FilesystemView('/'); // init short data $this->dataShort = 'hats'; // remember files_trashbin state - $this->stateFilesTrashbin = OC_App::isEnabled( 'files_trashbin' ); + $this->stateFilesTrashbin = OC_App::isEnabled('files_trashbin'); // we don't want to tests with app files_trashbin enabled - \OC_App::disable( 'files_trashbin' ); + \OC_App::disable('files_trashbin'); } function tearDown() { // reset app files_trashbin - if ( $this->stateFilesTrashbin ) { - OC_App::enable( 'files_trashbin' ); - } else { - OC_App::disable( 'files_trashbin' ); + if ($this->stateFilesTrashbin) { + OC_App::enable('files_trashbin'); + } + else { + OC_App::disable('files_trashbin'); } } public static function tearDownAfterClass() { - + // cleanup test user + \OC_User::deleteUser(\Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1); } function testStreamOptions() { $filename = '/tmp-' . time(); - $view = new \OC\Files\View( '/' . $this->userId . '/files' ); + $view = new \OC\Files\View('/' . $this->userId . '/files'); // Save short data as encrypted file using stream wrapper - $cryptedFile = $view->file_put_contents( $filename, $this->dataShort ); + $cryptedFile = $view->file_put_contents($filename, $this->dataShort); // Test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); - $handle = $view->fopen( $filename, 'r' ); + $handle = $view->fopen($filename, 'r'); // check if stream is at position zero - $this->assertEquals( 0, ftell( $handle ) ); + $this->assertEquals(0, ftell($handle)); // set stream options - $this->assertTrue( flock( $handle, LOCK_SH ) ); - $this->assertTrue( flock( $handle, LOCK_UN ) ); + $this->assertTrue(flock($handle, LOCK_SH)); + $this->assertTrue(flock($handle, LOCK_UN)); // tear down - $view->unlink( $filename ); + $view->unlink($filename); } function testStreamSetBlocking() { $filename = '/tmp-' . time(); - $view = new \OC\Files\View( '/' . $this->userId . '/files' ); + $view = new \OC\Files\View('/' . $this->userId . '/files'); // Save short data as encrypted file using stream wrapper - $cryptedFile = $view->file_put_contents( $filename, $this->dataShort ); + $cryptedFile = $view->file_put_contents($filename, $this->dataShort); // Test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); - $handle = $view->fopen( $filename, 'r' ); + $handle = $view->fopen($filename, 'r'); // set stream options - $this->assertTrue( stream_set_blocking( $handle, 1 ) ); + $this->assertTrue(stream_set_blocking($handle, 1)); // tear down - $view->unlink( $filename ); + $view->unlink($filename); } function testStreamSetTimeout() { $filename = '/tmp-' . time(); - $view = new \OC\Files\View( '/' . $this->userId . '/files' ); + $view = new \OC\Files\View('/' . $this->userId . '/files'); // Save short data as encrypted file using stream wrapper - $cryptedFile = $view->file_put_contents( $filename, $this->dataShort ); + $cryptedFile = $view->file_put_contents($filename, $this->dataShort); // Test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); - $handle = $view->fopen( $filename, 'r' ); + $handle = $view->fopen($filename, 'r'); // set stream options - $this->assertFalse( stream_set_timeout( $handle, 1 ) ); + $this->assertFalse(stream_set_timeout($handle, 1)); // tear down - $view->unlink( $filename ); + $view->unlink($filename); } function testStreamSetWriteBuffer() { $filename = '/tmp-' . time(); - $view = new \OC\Files\View( '/' . $this->userId . '/files' ); + $view = new \OC\Files\View('/' . $this->userId . '/files'); // Save short data as encrypted file using stream wrapper - $cryptedFile = $view->file_put_contents( $filename, $this->dataShort ); + $cryptedFile = $view->file_put_contents($filename, $this->dataShort); // Test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); - $handle = $view->fopen( $filename, 'r' ); + $handle = $view->fopen($filename, 'r'); // set stream options - $this->assertEquals( 0, stream_set_write_buffer( $handle, 1024 ) ); + $this->assertEquals(0, stream_set_write_buffer($handle, 1024)); // tear down - $view->unlink( $filename ); + $view->unlink($filename); } } \ No newline at end of file diff --git a/apps/files_encryption/tests/trashbin.php b/apps/files_encryption/tests/trashbin.php index 1d7cdc60b21..29f8fb5a396 100755 --- a/apps/files_encryption/tests/trashbin.php +++ b/apps/files_encryption/tests/trashbin.php @@ -20,14 +20,15 @@ * */ -require_once realpath( dirname( __FILE__ ) . '/../../../lib/base.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/crypt.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/keymanager.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/proxy.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/stream.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/util.php' ); -require_once realpath( dirname( __FILE__ ) . '/../appinfo/app.php' ); -require_once realpath( dirname( __FILE__ ) . '/../../files_trashbin/appinfo/app.php' ); +require_once realpath(dirname(__FILE__) . '/../../../lib/base.php'); +require_once realpath(dirname(__FILE__) . '/../lib/crypt.php'); +require_once realpath(dirname(__FILE__) . '/../lib/keymanager.php'); +require_once realpath(dirname(__FILE__) . '/../lib/proxy.php'); +require_once realpath(dirname(__FILE__) . '/../lib/stream.php'); +require_once realpath(dirname(__FILE__) . '/../lib/util.php'); +require_once realpath(dirname(__FILE__) . '/../appinfo/app.php'); +require_once realpath(dirname(__FILE__) . '/../../files_trashbin/appinfo/app.php'); +require_once realpath(dirname(__FILE__) . '/util.php'); use OCA\Encryption; @@ -35,8 +36,9 @@ use OCA\Encryption; * Class Test_Encryption_Trashbin * @brief this class provide basic trashbin app tests */ -class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase -{ +class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase { + + const TEST_ENCRYPTION_TRASHBIN_USER1 = "test-trashbin-user1"; public $userId; public $pass; @@ -53,10 +55,10 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase public static function setUpBeforeClass() { // reset backend \OC_User::clearBackends(); - \OC_User::useBackend( 'database' ); + \OC_User::useBackend('database'); - \OC_Hook::clear( 'OC_Filesystem' ); - \OC_Hook::clear( 'OC_User' ); + \OC_Hook::clear('OC_Filesystem'); + \OC_Hook::clear('OC_User'); // trashbin hooks \OCA\Files_Trashbin\Trashbin::registerHooks(); @@ -66,29 +68,20 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase // clear and register hooks \OC_FileProxy::clearProxies(); - \OC_FileProxy::register( new OCA\Encryption\Proxy() ); - - // setup filesystem - \OC_Util::tearDownFS(); - \OC_User::setUserId( '' ); - \OC\Files\Filesystem::tearDown(); - \OC_Util::setupFS( 'admin' ); - \OC_User::setUserId( 'admin' ); - - // login admin - $params['uid'] = 'admin'; - $params['password'] = 'admin'; - OCA\Encryption\Hooks::login( $params ); + \OC_FileProxy::register(new OCA\Encryption\Proxy()); + + // create test user + \Test_Encryption_Util::loginHelper(\Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1, true); } function setUp() { // set user id - \OC_User::setUserId( 'admin' ); - $this->userId = 'admin'; - $this->pass = 'admin'; + \OC_User::setUserId(\Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1); + $this->userId = \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1; + $this->pass = \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1; // init filesystem view - $this->view = new \OC_FilesystemView( '/' ); + $this->view = new \OC_FilesystemView('/'); // init short data $this->dataShort = 'hats'; @@ -98,23 +91,25 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase $this->subsubfolder = '/subsubfolder1'; // remember files_trashbin state - $this->stateFilesTrashbin = OC_App::isEnabled( 'files_trashbin' ); + $this->stateFilesTrashbin = OC_App::isEnabled('files_trashbin'); // we want to tests with app files_trashbin enabled - \OC_App::enable( 'files_trashbin' ); + \OC_App::enable('files_trashbin'); } function tearDown() { // reset app files_trashbin - if ( $this->stateFilesTrashbin ) { - OC_App::enable( 'files_trashbin' ); - } else { - OC_App::disable( 'files_trashbin' ); + if ($this->stateFilesTrashbin) { + OC_App::enable('files_trashbin'); + } + else { + OC_App::disable('files_trashbin'); } } public static function tearDownAfterClass() { - + // cleanup test user + \OC_User::deleteUser(\Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1); } /** @@ -126,49 +121,63 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase $filename = 'tmp-' . time() . '.txt'; // save file with content - $cryptedFile = file_put_contents( 'crypt:///' . $filename, $this->dataShort ); + $cryptedFile = file_put_contents('crypt:///' . $filename, $this->dataShort); // test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); // check if key for admin exists - $this->assertTrue( $this->view->file_exists( '/admin/files_encryption/keyfiles/' . $filename . '.key' ) ); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/' . $filename + . '.key')); // check if share key for admin exists - $this->assertTrue( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $filename . '.admin.shareKey' ) ); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/' + . $filename . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey')); // delete file - \OC\FIles\Filesystem::unlink( $filename ); + \OC\FIles\Filesystem::unlink($filename); // check if file not exists - $this->assertFalse( $this->view->file_exists( '/admin/files/' . $filename ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename)); // check if key for admin not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/keyfiles/' . $filename . '.key' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/' . $filename + . '.key')); // check if share key for admin not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $filename . '.admin.shareKey' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/' + . $filename . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey')); // get files - $trashFiles = $this->view->getDirectoryContent( '/admin/files_trashbin/files/' ); + $trashFiles = $this->view->getDirectoryContent( + '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/files/'); $trashFileSuffix = null; // find created file with timestamp - foreach ( $trashFiles as $file ) { - if ( strncmp( $file['path'], $filename, strlen( $filename ) ) ) { - $path_parts = pathinfo( $file['name'] ); + foreach ($trashFiles as $file) { + if (strncmp($file['path'], $filename, strlen($filename))) { + $path_parts = pathinfo($file['name']); $trashFileSuffix = $path_parts['extension']; } } // check if we found the file we created - $this->assertNotNull( $trashFileSuffix ); + $this->assertNotNull($trashFileSuffix); // check if key for admin not exists - $this->assertTrue( $this->view->file_exists( '/admin/files_trashbin/keyfiles/' . $filename . '.key.' . $trashFileSuffix ) ); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keyfiles/' . $filename + . '.key.' . $trashFileSuffix)); // check if share key for admin not exists - $this->assertTrue( $this->view->file_exists( '/admin/files_trashbin/share-keys/' . $filename . '.admin.shareKey.' . $trashFileSuffix ) ); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/share-keys/' . $filename + . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey.' . $trashFileSuffix)); // return filename for next test return $filename . '.' . $trashFileSuffix; @@ -179,25 +188,30 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase * * @depends testDeleteFile */ - function testRestoreFile( $filename ) { + function testRestoreFile($filename) { // prepare file information - $path_parts = pathinfo( $filename ); + $path_parts = pathinfo($filename); $trashFileSuffix = $path_parts['extension']; - $timestamp = str_replace( 'd', '', $trashFileSuffix ); - $fileNameWithoutSuffix = str_replace( '.' . $trashFileSuffix, '', $filename ); + $timestamp = str_replace('d', '', $trashFileSuffix); + $fileNameWithoutSuffix = str_replace('.' . $trashFileSuffix, '', $filename); // restore file - $this->assertTrue( \OCA\Files_Trashbin\Trashbin::restore( $filename, $fileNameWithoutSuffix, $timestamp ) ); + $this->assertTrue(\OCA\Files_Trashbin\Trashbin::restore($filename, $fileNameWithoutSuffix, $timestamp)); // check if file exists - $this->assertTrue( $this->view->file_exists( '/admin/files/' . $fileNameWithoutSuffix ) ); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $fileNameWithoutSuffix)); // check if key for admin exists - $this->assertTrue( $this->view->file_exists( '/admin/files_encryption/keyfiles/' . $fileNameWithoutSuffix . '.key' ) ); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/' + . $fileNameWithoutSuffix . '.key')); // check if share key for admin exists - $this->assertTrue( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $fileNameWithoutSuffix . '.admin.shareKey' ) ); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/' + . $fileNameWithoutSuffix . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey')); } /** @@ -209,59 +223,78 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase $filename = 'tmp-' . time() . '.txt'; // save file with content - $cryptedFile = file_put_contents( 'crypt:///' . $filename, $this->dataShort ); + $cryptedFile = file_put_contents('crypt:///' . $filename, $this->dataShort); // test that data was successfully written - $this->assertTrue( is_int( $cryptedFile ) ); + $this->assertTrue(is_int($cryptedFile)); // check if key for admin exists - $this->assertTrue( $this->view->file_exists( '/admin/files_encryption/keyfiles/' . $filename . '.key' ) ); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/' . $filename + . '.key')); // check if share key for admin exists - $this->assertTrue( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $filename . '.admin.shareKey' ) ); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/' + . $filename . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey')); // delete file - \OC\FIles\Filesystem::unlink( $filename ); + \OC\FIles\Filesystem::unlink($filename); // check if file not exists - $this->assertFalse( $this->view->file_exists( '/admin/files/' . $filename ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename)); // check if key for admin not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/keyfiles/' . $filename . '.key' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/' . $filename + . '.key')); // check if share key for admin not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $filename . '.admin.shareKey' ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/' + . $filename . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey')); // find created file with timestamp - $query = \OC_DB::prepare( 'SELECT `timestamp`,`type` FROM `*PREFIX*files_trash`' - . ' WHERE `id`=?' ); - $result = $query->execute( array( $filename ) )->fetchRow(); + $query = \OC_DB::prepare('SELECT `timestamp`,`type` FROM `*PREFIX*files_trash`' + . ' WHERE `id`=?'); + $result = $query->execute(array($filename))->fetchRow(); - $this->assertTrue( is_array( $result ) ); + $this->assertTrue(is_array($result)); // build suffix $trashFileSuffix = 'd' . $result['timestamp']; // check if key for admin exists - $this->assertTrue( $this->view->file_exists( '/admin/files_trashbin/keyfiles/' . $filename . '.key.' . $trashFileSuffix ) ); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keyfiles/' . $filename + . '.key.' . $trashFileSuffix)); // check if share key for admin exists - $this->assertTrue( $this->view->file_exists( '/admin/files_trashbin/share-keys/' . $filename . '.admin.shareKey.' . $trashFileSuffix ) ); + $this->assertTrue($this->view->file_exists( + '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/share-keys/' . $filename + . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey.' . $trashFileSuffix)); // get timestamp from file - $timestamp = str_replace( 'd', '', $trashFileSuffix ); + $timestamp = str_replace('d', '', $trashFileSuffix); // delete file forever - $this->assertGreaterThan( 0, \OCA\Files_Trashbin\Trashbin::delete( $filename, $timestamp ) ); + $this->assertGreaterThan(0, \OCA\Files_Trashbin\Trashbin::delete($filename, $timestamp)); // check if key for admin not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_trashbin/files/' . $filename . '.' . $trashFileSuffix ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/files/' . $filename . '.' + . $trashFileSuffix)); // check if key for admin not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_trashbin/keyfiles/' . $filename . '.key.' . $trashFileSuffix ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keyfiles/' . $filename + . '.key.' . $trashFileSuffix)); // check if share key for admin not exists - $this->assertFalse( $this->view->file_exists( '/admin/files_trashbin/share-keys/' . $filename . '.admin.shareKey.' . $trashFileSuffix ) ); + $this->assertFalse($this->view->file_exists( + '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/share-keys/' . $filename + . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey.' . $trashFileSuffix)); } } \ No newline at end of file diff --git a/apps/files_encryption/tests/util.php b/apps/files_encryption/tests/util.php index af78894da2b..2069cae27e5 100755 --- a/apps/files_encryption/tests/util.php +++ b/apps/files_encryption/tests/util.php @@ -6,21 +6,23 @@ * See the COPYING-README file. */ -require_once realpath( dirname( __FILE__ ) . '/../../../lib/base.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/crypt.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/keymanager.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/proxy.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/stream.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/util.php' ); -require_once realpath( dirname( __FILE__ ) . '/../appinfo/app.php' ); +require_once realpath(dirname(__FILE__) . '/../../../lib/base.php'); +require_once realpath(dirname(__FILE__) . '/../lib/crypt.php'); +require_once realpath(dirname(__FILE__) . '/../lib/keymanager.php'); +require_once realpath(dirname(__FILE__) . '/../lib/proxy.php'); +require_once realpath(dirname(__FILE__) . '/../lib/stream.php'); +require_once realpath(dirname(__FILE__) . '/../lib/util.php'); +require_once realpath(dirname(__FILE__) . '/../appinfo/app.php'); use OCA\Encryption; /** * Class Test_Encryption_Util */ -class Test_Encryption_Util extends \PHPUnit_Framework_TestCase -{ +class Test_Encryption_Util extends \PHPUnit_Framework_TestCase { + + const TEST_ENCRYPTION_UTIL_USER1 = "test-util-user1"; + const TEST_ENCRYPTION_UTIL_LEGACY_USER = "test-legacy-user"; public $userId; public $encryptionDir; @@ -40,24 +42,40 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase public $dataShort; public $legacyEncryptedData; public $legacyEncryptedDataKey; - public $lagacyKey; + public $legacyKey; + public $stateFilesTrashbin; - function setUp() { + public static function setUpBeforeClass() { // reset backend - \OC_User::useBackend( 'database' ); + \OC_User::clearBackends(); + \OC_User::useBackend('database'); - \OC_User::setUserId( 'admin' ); - $this->userId = 'admin'; - $this->pass = 'admin'; + // 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_Util::TEST_ENCRYPTION_UTIL_USER1, true); + \Test_Encryption_Util::loginHelper(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER, true); + } + + + function setUp() { + \OC_User::setUserId(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1); + $this->userId = \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1; + $this->pass = \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1; // set content for encrypting / decrypting in tests - $this->dataUrl = realpath( dirname( __FILE__ ) . '/../lib/crypt.php' ); + $this->dataUrl = realpath(dirname(__FILE__) . '/../lib/crypt.php'); $this->dataShort = 'hats'; - $this->dataLong = file_get_contents( realpath( dirname( __FILE__ ) . '/../lib/crypt.php' ) ); - $this->legacyData = realpath( dirname( __FILE__ ) . '/legacy-text.txt' ); - $this->legacyEncryptedData = realpath( dirname( __FILE__ ) . '/legacy-encrypted-text.txt' ); - $this->legacyEncryptedDataKey = realpath( dirname( __FILE__ ) . '/encryption.key' ); - $this->lagacyKey = '62829813025828180801'; + $this->dataLong = file_get_contents(realpath(dirname(__FILE__) . '/../lib/crypt.php')); + $this->legacyData = realpath(dirname(__FILE__) . '/legacy-text.txt'); + $this->legacyEncryptedData = realpath(dirname(__FILE__) . '/legacy-encrypted-text.txt'); + $this->legacyEncryptedDataKey = realpath(dirname(__FILE__) . '/encryption.key'); + $this->legacyKey = '30943623843030686906'; $keypair = Encryption\Crypt::createKeypair(); @@ -67,52 +85,49 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase $this->publicKeyDir = '/' . 'public-keys'; $this->encryptionDir = '/' . $this->userId . '/' . 'files_encryption'; $this->keyfilesPath = $this->encryptionDir . '/' . 'keyfiles'; - $this->publicKeyPath = $this->publicKeyDir . '/' . $this->userId . '.public.key'; // e.g. data/public-keys/admin.public.key - $this->privateKeyPath = $this->encryptionDir . '/' . $this->userId . '.private.key'; // e.g. data/admin/admin.private.key - - $this->view = new \OC_FilesystemView( '/' ); - - $userHome = \OC_User::getHome( $this->userId ); - $this->dataDir = str_replace( '/' . $this->userId, '', $userHome ); - - // Filesystem related hooks - \OCA\Encryption\Helper::registerFilesystemHooks(); + $this->publicKeyPath = + $this->publicKeyDir . '/' . $this->userId . '.public.key'; // e.g. data/public-keys/admin.public.key + $this->privateKeyPath = + $this->encryptionDir . '/' . $this->userId . '.private.key'; // e.g. data/admin/admin.private.key - // clear and register hooks - \OC_FileProxy::clearProxies(); - \OC_FileProxy::register( new OCA\Encryption\Proxy() ); + $this->view = new \OC_FilesystemView('/'); - // setup filesystem - \OC_Util::tearDownFS(); - \OC_User::setUserId( '' ); - \OC\Files\Filesystem::tearDown(); - \OC_Util::setupFS( $this->userId ); - \OC_User::setUserId( $this->userId ); + $this->util = new Encryption\Util($this->view, $this->userId); - // login admin - $params['uid'] = $this->userId; - $params['password'] = $this->pass; - OCA\Encryption\Hooks::login( $params ); + // remember files_trashbin state + $this->stateFilesTrashbin = OC_App::isEnabled('files_trashbin'); - $this->util = new Encryption\Util( $this->view, $this->userId ); + // we don't want to tests with app files_trashbin enabled + \OC_App::disable('files_trashbin'); } function tearDown() { - // clear and register hooks - \OC_FileProxy::clearProxies(); + // reset app files_trashbin + if ($this->stateFilesTrashbin) { + OC_App::enable('files_trashbin'); + } + else { + OC_App::disable('files_trashbin'); + } + } + + public static function tearDownAfterClass() { + // cleanup test user + \OC_User::deleteUser(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1); + \OC_User::deleteUser(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER); } /** * @brief test that paths set during User construction are correct */ function testKeyPaths() { - $util = new Encryption\Util( $this->view, $this->userId ); + $util = new Encryption\Util($this->view, $this->userId); - $this->assertEquals( $this->publicKeyDir, $util->getPath( 'publicKeyDir' ) ); - $this->assertEquals( $this->encryptionDir, $util->getPath( 'encryptionDir' ) ); - $this->assertEquals( $this->keyfilesPath, $util->getPath( 'keyfilesPath' ) ); - $this->assertEquals( $this->publicKeyPath, $util->getPath( 'publicKeyPath' ) ); - $this->assertEquals( $this->privateKeyPath, $util->getPath( 'privateKeyPath' ) ); + $this->assertEquals($this->publicKeyDir, $util->getPath('publicKeyDir')); + $this->assertEquals($this->encryptionDir, $util->getPath('encryptionDir')); + $this->assertEquals($this->keyfilesPath, $util->getPath('keyfilesPath')); + $this->assertEquals($this->publicKeyPath, $util->getPath('publicKeyPath')); + $this->assertEquals($this->privateKeyPath, $util->getPath('privateKeyPath')); } @@ -120,78 +135,80 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase * @brief test setup of encryption directories */ function testSetupServerSide() { - $this->assertEquals( true, $this->util->setupServerSide( $this->pass ) ); + $this->assertEquals(true, $this->util->setupServerSide($this->pass)); } /** * @brief test checking whether account is ready for encryption, */ function testUserIsReady() { - $this->assertEquals( true, $this->util->ready() ); + $this->assertEquals(true, $this->util->ready()); } /** * @brief test checking whether account is not ready for encryption, */ - function testUserIsNotReady() { - $this->view->unlink( $this->publicKeyDir ); - - $params['uid'] = $this->userId; - $params['password'] = $this->pass; - $this->assertFalse( OCA\Encryption\Hooks::login( $params ) ); - - $this->view->unlink( $this->privateKeyPath ); - } +// function testUserIsNotReady() { +// $this->view->unlink($this->publicKeyDir); +// +// $params['uid'] = $this->userId; +// $params['password'] = $this->pass; +// $this->assertFalse(OCA\Encryption\Hooks::login($params)); +// +// $this->view->unlink($this->privateKeyPath); +// } /** * @brief test checking whether account is not ready for encryption, */ - function testIsLagacyUser() { - $userView = new \OC_FilesystemView( '/' . $this->userId ); + function testIsLegacyUser() { + \Test_Encryption_Util::loginHelper(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER); + + $userView = new \OC_FilesystemView('/' . \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER); // Disable encryption proxy to prevent recursive calls $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; - $encryptionKeyContent = file_get_contents( $this->legacyEncryptedDataKey ); - $userView->file_put_contents( '/encryption.key', $encryptionKeyContent ); + $encryptionKeyContent = file_get_contents($this->legacyEncryptedDataKey); + $userView->file_put_contents('/encryption.key', $encryptionKeyContent); \OC_FileProxy::$enabled = $proxyStatus; - $params['uid'] = $this->userId; - $params['password'] = $this->pass; + $params['uid'] = \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER; + $params['password'] = \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER; - $util = new Encryption\Util( $this->view, $this->userId ); - $util->setMigrationStatus( 0 ); + $util = new Encryption\Util($this->view, \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER); + $util->setMigrationStatus(0); - $this->assertTrue( OCA\Encryption\Hooks::login( $params ) ); + $this->assertTrue(OCA\Encryption\Hooks::login($params)); - $this->assertEquals( $this->lagacyKey, $_SESSION['legacyKey'] ); + $this->assertEquals($this->legacyKey, $_SESSION['legacyKey']); } function testRecoveryEnabledForUser() { - $util = new Encryption\Util( $this->view, $this->userId ); + $util = new Encryption\Util($this->view, $this->userId); // Record the value so we can return it to it's original state later $enabled = $util->recoveryEnabledForUser(); - $this->assertTrue( $util->setRecoveryForUser( 1 ) ); + $this->assertTrue($util->setRecoveryForUser(1)); - $this->assertEquals( 1, $util->recoveryEnabledForUser() ); + $this->assertEquals(1, $util->recoveryEnabledForUser()); - $this->assertTrue( $util->setRecoveryForUser( 0 ) ); + $this->assertTrue($util->setRecoveryForUser(0)); - $this->assertEquals( 0, $util->recoveryEnabledForUser() ); + $this->assertEquals(0, $util->recoveryEnabledForUser()); // Return the setting to it's previous state - $this->assertTrue( $util->setRecoveryForUser( $enabled ) ); + $this->assertTrue($util->setRecoveryForUser($enabled)); } function testGetUidAndFilename() { - \OC_User::setUserId( 'admin' ); + \OC_User::setUserId(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1); $filename = 'tmp-' . time() . '.test'; @@ -199,80 +216,102 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; - $this->view->file_put_contents( $this->userId . '/files/' . $filename, $this->dataShort ); + $this->view->file_put_contents($this->userId . '/files/' . $filename, $this->dataShort); // Re-enable proxy - our work is done \OC_FileProxy::$enabled = $proxyStatus; - $util = new Encryption\Util( $this->view, $this->userId ); + $util = new Encryption\Util($this->view, $this->userId); - list( $fileOwnerUid, $file ) = $util->getUidAndFilename( $filename ); + list($fileOwnerUid, $file) = $util->getUidAndFilename($filename); - $this->assertEquals( 'admin', $fileOwnerUid ); + $this->assertEquals(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1, $fileOwnerUid); - $this->assertEquals( $file, $filename ); + $this->assertEquals($file, $filename); - $this->view->unlink( $this->userId . '/files/' . $filename ); + $this->view->unlink($this->userId . '/files/' . $filename); } function testIsSharedPath() { $sharedPath = '/user1/files/Shared/test'; $path = '/user1/files/test'; - $this->assertTrue( $this->util->isSharedPath( $sharedPath ) ); + $this->assertTrue($this->util->isSharedPath($sharedPath)); - $this->assertFalse( $this->util->isSharedPath( $path ) ); + $this->assertFalse($this->util->isSharedPath($path)); } - function testEncryptLagacyFiles() { - // login admin - $params['uid'] = $this->userId; - $params['password'] = $this->pass; - OCA\Encryption\Hooks::login( $params ); + function testEncryptLegacyFiles() { + \Test_Encryption_Util::loginHelper(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER); - $userView = new \OC_FilesystemView( '/' . $this->userId ); - $view = new \OC_FilesystemView( '/' . $this->userId . '/files' ); + $userView = new \OC_FilesystemView('/' . \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER); + $view = new \OC_FilesystemView('/' . \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER . '/files'); // Disable encryption proxy to prevent recursive calls $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; - $encryptionKeyContent = file_get_contents( $this->legacyEncryptedDataKey ); - $userView->file_put_contents( '/encryption.key', $encryptionKeyContent ); + $encryptionKeyContent = file_get_contents($this->legacyEncryptedDataKey); + $userView->file_put_contents('/encryption.key', $encryptionKeyContent); - $legacyEncryptedData = file_get_contents( $this->legacyEncryptedData ); - $view->mkdir( '/test/' ); - $view->mkdir( '/test/subtest/' ); - $view->file_put_contents( '/test/subtest/legacy-encrypted-text.txt', $legacyEncryptedData ); + $legacyEncryptedData = file_get_contents($this->legacyEncryptedData); + $view->mkdir('/test/'); + $view->mkdir('/test/subtest/'); + $view->file_put_contents('/test/subtest/legacy-encrypted-text.txt', $legacyEncryptedData); - $fileInfo = $view->getFileInfo( '/test/subtest/legacy-encrypted-text.txt' ); + $fileInfo = $view->getFileInfo('/test/subtest/legacy-encrypted-text.txt'); $fileInfo['encrypted'] = true; - $view->putFileInfo( '/test/subtest/legacy-encrypted-text.txt', $fileInfo ); + $view->putFileInfo('/test/subtest/legacy-encrypted-text.txt', $fileInfo); \OC_FileProxy::$enabled = $proxyStatus; - $params['uid'] = $this->userId; - $params['password'] = $this->pass; + $params['uid'] = \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER; + $params['password'] = \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER; - $util = new Encryption\Util( $this->view, $this->userId ); - $util->setMigrationStatus( 0 ); + $util = new Encryption\Util($this->view, \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER); + $util->setMigrationStatus(0); - $this->assertTrue( OCA\Encryption\Hooks::login( $params ) ); + $this->assertTrue(OCA\Encryption\Hooks::login($params)); - $this->assertEquals( $this->lagacyKey, $_SESSION['legacyKey'] ); + $this->assertEquals($this->legacyKey, $_SESSION['legacyKey']); - $files = $util->findEncFiles( '/' . $this->userId . '/files/' ); + $files = $util->findEncFiles('/' . \Test_Encryption_Util::TEST_ENCRYPTION_UTIL_LEGACY_USER . '/files/'); - $this->assertTrue( is_array( $files ) ); + $this->assertTrue(is_array($files)); $found = false; - foreach ( $files['encrypted'] as $encryptedFile ) { - if ( $encryptedFile['name'] === 'legacy-encrypted-text.txt' ) { + foreach ($files['encrypted'] as $encryptedFile) { + if ($encryptedFile['name'] === 'legacy-encrypted-text.txt') { $found = true; break; } } - $this->assertTrue( $found ); + $this->assertTrue($found); + } + + /** + * @param $user + * @param bool $create + * @param bool $password + */ + public static function loginHelper($user, $create = false, $password = false) { + if ($create) { + \OC_User::createUser($user, $user); + } + + if ($password === false) { + $password = $user; + } + + \OC_Util::tearDownFS(); + \OC_User::setUserId(''); + \OC\Files\Filesystem::tearDown(); + \OC_Util::setupFS($user); + \OC_User::setUserId($user); + + $params['uid'] = $user; + $params['password'] = $password; + OCA\Encryption\Hooks::login($params); } } \ No newline at end of file diff --git a/apps/files_encryption/tests/webdav.php b/apps/files_encryption/tests/webdav.php index 57848cd273c..94d3ec3fa55 100755 --- a/apps/files_encryption/tests/webdav.php +++ b/apps/files_encryption/tests/webdav.php @@ -20,13 +20,14 @@ * */ -require_once realpath( dirname( __FILE__ ) . '/../../../lib/base.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/crypt.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/keymanager.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/proxy.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/stream.php' ); -require_once realpath( dirname( __FILE__ ) . '/../lib/util.php' ); -require_once realpath( dirname( __FILE__ ) . '/../appinfo/app.php' ); +require_once realpath(dirname(__FILE__) . '/../../../lib/base.php'); +require_once realpath(dirname(__FILE__) . '/../lib/crypt.php'); +require_once realpath(dirname(__FILE__) . '/../lib/keymanager.php'); +require_once realpath(dirname(__FILE__) . '/../lib/proxy.php'); +require_once realpath(dirname(__FILE__) . '/../lib/stream.php'); +require_once realpath(dirname(__FILE__) . '/../lib/util.php'); +require_once realpath(dirname(__FILE__) . '/../appinfo/app.php'); +require_once realpath(dirname(__FILE__) . '/util.php'); use OCA\Encryption; @@ -34,8 +35,9 @@ use OCA\Encryption; * Class Test_Encryption_Webdav * @brief this class provide basic webdav tests for PUT,GET and DELETE */ -class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase -{ +class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase { + + const TEST_ENCRYPTION_WEBDAV_USER1 = "test-webdav-user1"; public $userId; public $pass; @@ -46,57 +48,63 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase public $dataShort; public $stateFilesTrashbin; + public static function setUpBeforeClass() { + // reset backend + \OC_User::clearBackends(); + \OC_User::useBackend('database'); + + // Filesystem related hooks + \OCA\Encryption\Helper::registerFilesystemHooks(); + + // Filesystem related hooks + \OCA\Encryption\Helper::registerUserHooks(); + + // clear and register hooks + \OC_FileProxy::clearProxies(); + \OC_FileProxy::register(new OCA\Encryption\Proxy()); + + // create test user + \Test_Encryption_Util::loginHelper(\Test_Encryption_Webdav::TEST_ENCRYPTION_WEBDAV_USER1, true); + } + function setUp() { // reset backend - \OC_User::useBackend( 'database' ); + \OC_User::useBackend('database'); // set user id - \OC_User::setUserId( 'admin' ); - $this->userId = 'admin'; - $this->pass = 'admin'; + \OC_User::setUserId(\Test_Encryption_Webdav::TEST_ENCRYPTION_WEBDAV_USER1); + $this->userId = \Test_Encryption_Webdav::TEST_ENCRYPTION_WEBDAV_USER1; + $this->pass = \Test_Encryption_Webdav::TEST_ENCRYPTION_WEBDAV_USER1; // init filesystem view - $this->view = new \OC_FilesystemView( '/' ); + $this->view = new \OC_FilesystemView('/'); // init short data $this->dataShort = 'hats'; - // init filesystem related hooks - \OCA\Encryption\Helper::registerFilesystemHooks(); - - // clear and register hooks - \OC_FileProxy::clearProxies(); - \OC_FileProxy::register( new OCA\Encryption\Proxy() ); - // remember files_trashbin state - $this->stateFilesTrashbin = OC_App::isEnabled( 'files_trashbin' ); + $this->stateFilesTrashbin = OC_App::isEnabled('files_trashbin'); // we don't want to tests with app files_trashbin enabled - \OC_App::disable( 'files_trashbin' ); - - // init filesystem for user - \OC_Util::tearDownFS(); - \OC_User::setUserId( '' ); - \OC\Files\Filesystem::tearDown(); - \OC_Util::setupFS( $this->userId ); - \OC_User::setUserId( $this->userId ); - - // login user - $params['uid'] = $this->userId; - $params['password'] = $this->pass; - OCA\Encryption\Hooks::login( $params ); + \OC_App::disable('files_trashbin'); + + // create test user + \Test_Encryption_Util::loginHelper(\Test_Encryption_Webdav::TEST_ENCRYPTION_WEBDAV_USER1); } function tearDown() { // reset app files_trashbin - if ( $this->stateFilesTrashbin ) { - OC_App::enable( 'files_trashbin' ); - } else { - OC_App::disable( 'files_trashbin' ); + if ($this->stateFilesTrashbin) { + OC_App::enable('files_trashbin'); + } + else { + OC_App::disable('files_trashbin'); } + } - // clear and register hooks - \OC_FileProxy::clearProxies(); + public static function tearDownAfterClass() { + // cleanup test user + \OC_User::deleteUser(\Test_Encryption_Webdav::TEST_ENCRYPTION_WEBDAV_USER1); } /** @@ -115,38 +123,40 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase $_SERVER['HTTP_AUTHORIZATION'] = 'Basic YWRtaW46YWRtaW4='; $_SERVER['CONTENT_TYPE'] = 'application/octet-stream'; $_SERVER['PATH_INFO'] = '/webdav' . $filename; - $_SERVER['CONTENT_LENGTH'] = strlen( $this->dataShort ); + $_SERVER['CONTENT_LENGTH'] = strlen($this->dataShort); // handle webdav request - $this->handleWebdavRequest( $this->dataShort ); + $this->handleWebdavRequest($this->dataShort); // check if file was created - $this->assertTrue( $this->view->file_exists( '/' . $this->userId . '/files' . $filename ) ); + $this->assertTrue($this->view->file_exists('/' . $this->userId . '/files' . $filename)); // check if key-file was created - $this->assertTrue( $this->view->file_exists( '/' . $this->userId . '/files_encryption/keyfiles/' . $filename . '.key' ) ); + $this->assertTrue($this->view->file_exists( + '/' . $this->userId . '/files_encryption/keyfiles/' . $filename . '.key')); // check if shareKey-file was created - $this->assertTrue( $this->view->file_exists( '/' . $this->userId . '/files_encryption/share-keys/' . $filename . '.' . $this->userId . '.shareKey' ) ); + $this->assertTrue($this->view->file_exists( + '/' . $this->userId . '/files_encryption/share-keys/' . $filename . '.' . $this->userId . '.shareKey')); // disable encryption proxy to prevent recursive calls $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; // get encrypted file content - $encryptedContent = $this->view->file_get_contents( '/' . $this->userId . '/files' . $filename ); + $encryptedContent = $this->view->file_get_contents('/' . $this->userId . '/files' . $filename); // restore proxy state \OC_FileProxy::$enabled = $proxyStatus; // check if encrypted content is valid - $this->assertTrue( Encryption\Crypt::isCatfileContent( $encryptedContent ) ); + $this->assertTrue(Encryption\Crypt::isCatfileContent($encryptedContent)); // get decrypted file contents - $decrypt = file_get_contents( 'crypt://' . $filename ); + $decrypt = file_get_contents('crypt://' . $filename); // check if file content match with the written content - $this->assertEquals( $this->dataShort, $decrypt ); + $this->assertEquals($this->dataShort, $decrypt); // return filename for next test return $filename; @@ -157,7 +167,7 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase * * @depends testWebdavPUT */ - function testWebdavGET( $filename ) { + function testWebdavGET($filename) { // set server vars $_SERVER['REQUEST_METHOD'] = 'GET'; @@ -169,7 +179,7 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase $content = $this->handleWebdavRequest(); // check if file content match with the written content - $this->assertEquals( $this->dataShort, $content ); + $this->assertEquals($this->dataShort, $content); // return filename for next test return $filename; @@ -179,7 +189,7 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase * @brief test webdav delete random file * @depends testWebdavGET */ - function testWebdavDELETE( $filename ) { + function testWebdavDELETE($filename) { // set server vars $_SERVER['REQUEST_METHOD'] = 'DELETE'; $_SERVER['REQUEST_URI'] = '/remote.php/webdav' . $filename; @@ -190,13 +200,15 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase $content = $this->handleWebdavRequest(); // check if file was removed - $this->assertFalse( $this->view->file_exists( '/' . $this->userId . '/files' . $filename ) ); + $this->assertFalse($this->view->file_exists('/' . $this->userId . '/files' . $filename)); // check if key-file was removed - $this->assertFalse( $this->view->file_exists( '/' . $this->userId . '/files_encryption/keyfiles' . $filename . '.key' ) ); + $this->assertFalse($this->view->file_exists( + '/' . $this->userId . '/files_encryption/keyfiles' . $filename . '.key')); // check if shareKey-file was removed - $this->assertFalse( $this->view->file_exists( '/' . $this->userId . '/files_encryption/share-keys' . $filename . '.' . $this->userId . '.shareKey' ) ); + $this->assertFalse($this->view->file_exists( + '/' . $this->userId . '/files_encryption/share-keys' . $filename . '.' . $this->userId . '.shareKey')); } /** @@ -206,30 +218,30 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase * * @note this init procedure is copied from /apps/files/remote.php */ - function handleWebdavRequest( $body = false ) { + function handleWebdavRequest($body = false) { // Backends $authBackend = new OC_Connector_Sabre_Auth(); $lockBackend = new OC_Connector_Sabre_Locks(); $requestBackend = new OC_Connector_Sabre_Request(); // Create ownCloud Dir - $publicDir = new OC_Connector_Sabre_Directory( '' ); + $publicDir = new OC_Connector_Sabre_Directory(''); // Fire up server - $server = new Sabre_DAV_Server( $publicDir ); + $server = new Sabre_DAV_Server($publicDir); $server->httpRequest = $requestBackend; - $server->setBaseUri( '/remote.php/webdav/' ); + $server->setBaseUri('/remote.php/webdav/'); // Load plugins - $server->addPlugin( new Sabre_DAV_Auth_Plugin( $authBackend, 'ownCloud' ) ); - $server->addPlugin( new Sabre_DAV_Locks_Plugin( $lockBackend ) ); - $server->addPlugin( new Sabre_DAV_Browser_Plugin( false ) ); // Show something in the Browser, but no upload - $server->addPlugin( new OC_Connector_Sabre_QuotaPlugin() ); - $server->addPlugin( new OC_Connector_Sabre_MaintenancePlugin() ); + $server->addPlugin(new Sabre_DAV_Auth_Plugin($authBackend, 'ownCloud')); + $server->addPlugin(new Sabre_DAV_Locks_Plugin($lockBackend)); + $server->addPlugin(new Sabre_DAV_Browser_Plugin(false)); // Show something in the Browser, but no upload + $server->addPlugin(new OC_Connector_Sabre_QuotaPlugin()); + $server->addPlugin(new OC_Connector_Sabre_MaintenancePlugin()); // And off we go! - if ( $body ) { - $server->httpRequest->setBody( $body ); + if ($body) { + $server->httpRequest->setBody($body); } // turn on output buffering -- 2.39.5