Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjoern Schiessle <schiessle@owncloud.com>2015-03-30 18:29:07 +0300
committerThomas Müller <thomas.mueller@tmit.eu>2015-04-07 14:30:28 +0300
commite7a68d1c21c52a39ddec59579ab7701dfef82b2a (patch)
treef18553183eee730b754f89bf2b5a2a1ce5facade /apps/files_encryption/tests/hooks.php
parent0eee3a2618235bcb59ce1bcb98526a7592de4578 (diff)
remove old encryption app
Diffstat (limited to 'apps/files_encryption/tests/hooks.php')
-rw-r--r--apps/files_encryption/tests/hooks.php447
1 files changed, 0 insertions, 447 deletions
diff --git a/apps/files_encryption/tests/hooks.php b/apps/files_encryption/tests/hooks.php
deleted file mode 100644
index b63e0431187..00000000000
--- a/apps/files_encryption/tests/hooks.php
+++ /dev/null
@@ -1,447 +0,0 @@
-<?php
-/**
- * @author Björn Schießle <schiessle@owncloud.com>
- * @author Joas Schilling <nickvergessen@owncloud.com>
- * @author Jörn Friedrich Dreyer <jfd@butonic.de>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
- * @author Vincent Petry <pvince81@owncloud.com>
- *
- * @copyright Copyright (c) 2015, ownCloud, Inc.
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
- */
-
-namespace OCA\Files_Encryption\Tests;
-
-/**
- * Class Hooks
- * this class provide basic hook app tests
- */
-class Hooks extends TestCase {
-
- const TEST_ENCRYPTION_HOOKS_USER1 = "test-encryption-hooks-user1.dot";
- const TEST_ENCRYPTION_HOOKS_USER2 = "test-encryption-hooks-user2.dot";
-
- /** @var \OC\Files\View */
- public $user1View; // view on /data/user1/files
- /** @var \OC\Files\View */
- public $user2View; // view on /data/user2/files
- /** @var \OC\Files\View */
- public $rootView; // view on /data/user
- public $data;
- public $filename;
- public $folder;
-
- private static $testFiles;
-
- public static function setUpBeforeClass() {
- parent::setUpBeforeClass();
-
- // note: not using a data provider because these
- // files all need to coexist to make sure the
- // share keys are found properly (pattern matching)
- self::$testFiles = array(
- 't est.txt',
- 't est_.txt',
- 't est.doc.txt',
- 't est(.*).txt', // make sure the regexp is escaped
- 'multiple.dots.can.happen.too.txt',
- 't est.' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.txt',
- 't est_.' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey.txt',
- 'who would upload their.shareKey',
- 'user ones file.txt',
- 'user ones file.txt.backup',
- '.t est.txt'
- );
-
- // create test user
- self::loginHelper(self::TEST_ENCRYPTION_HOOKS_USER1, true);
- self::loginHelper(self::TEST_ENCRYPTION_HOOKS_USER2, true);
- }
-
- protected function setUp() {
- parent::setUp();
-
- // set user id
- self::loginHelper(self::TEST_ENCRYPTION_HOOKS_USER1);
- \OC_User::setUserId(self::TEST_ENCRYPTION_HOOKS_USER1);
-
- // init filesystem view
- $this->user1View = new \OC\Files\View('/'. self::TEST_ENCRYPTION_HOOKS_USER1 . '/files');
- $this->user2View = new \OC\Files\View('/'. self::TEST_ENCRYPTION_HOOKS_USER2 . '/files');
- $this->rootView = new \OC\Files\View('/');
-
- // init short data
- $this->data = 'hats';
- $this->filename = 'enc_hooks_tests-' . $this->getUniqueID() . '.txt';
- $this->folder = 'enc_hooks_tests_folder-' . $this->getUniqueID();
-
- }
-
- public static function tearDownAfterClass() {
- // cleanup test user
- \OC_User::deleteUser(self::TEST_ENCRYPTION_HOOKS_USER1);
- \OC_User::deleteUser(self::TEST_ENCRYPTION_HOOKS_USER2);
-
- parent::tearDownAfterClass();
- }
-
- function testDisableHook() {
- // encryption is enabled and running so we should have some user specific
- // settings in oc_preferences
- $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*preferences` WHERE `appid` = ?');
- $result = $query->execute(array('files_encryption'));
- $row = $result->fetchRow();
- $this->assertTrue(is_array($row));
-
- // disabling the app should delete all user specific settings
- \OCA\Files_Encryption\Hooks::preDisable(array('app' => 'files_encryption'));
-
- // check if user specific settings for the encryption app are really gone
- $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*preferences` WHERE `appid` = ?');
- $result = $query->execute(array('files_encryption'));
- $row = $result->fetchRow();
- $this->assertFalse($row);
-
- // relogin user to initialize the encryption again
- $user = \OCP\User::getUser();
- self::loginHelper($user);
-
- }
-
- function testDeleteHooks() {
-
- // remember files_trashbin state
- $stateFilesTrashbin = \OC_App::isEnabled('files_trashbin');
-
- // we want to tests with app files_trashbin disabled
- \OC_App::disable('files_trashbin');
-
- // make sure that the trash bin is disabled
- $this->assertFalse(\OC_APP::isEnabled('files_trashbin'));
-
- $this->user1View->file_put_contents($this->filename, $this->data);
-
- // check if all keys are generated
- $this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
- . $this->filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
- $this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
-
-
- self::logoutHelper();
- self::loginHelper(self::TEST_ENCRYPTION_HOOKS_USER2);
- \OC_User::setUserId(self::TEST_ENCRYPTION_HOOKS_USER2);
-
-
- $this->user2View->file_put_contents($this->filename, $this->data);
-
- // check if all keys are generated
- $this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/'
- . $this->filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
- $this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
-
-
- // create a dummy file that we can delete something outside of data/user/files
- // in this case no share or file keys should be deleted
- $this->rootView->file_put_contents(self::TEST_ENCRYPTION_HOOKS_USER2 . "/" . $this->filename, $this->data);
-
- // delete dummy file outside of data/user/files
- $this->rootView->unlink(self::TEST_ENCRYPTION_HOOKS_USER2 . "/" . $this->filename);
-
- // all keys should still exist
- $this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/'
- . $this->filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
- $this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
-
-
- // delete the file in data/user/files
- // now the correspondig share and file keys from user2 should be deleted
- $this->user2View->unlink($this->filename);
-
- // check if keys from user2 are really deleted
- $this->assertFalse($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/'
- . $this->filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
- $this->assertFalse($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
-
- // but user1 keys should still exist
- $this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
- . $this->filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
- $this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
-
- if ($stateFilesTrashbin) {
- \OC_App::enable('files_trashbin');
- }
- else {
- \OC_App::disable('files_trashbin');
- }
- }
-
- function testDeleteHooksForSharedFiles() {
-
- self::logoutHelper();
- self::loginHelper(self::TEST_ENCRYPTION_HOOKS_USER1);
- \OC_User::setUserId(self::TEST_ENCRYPTION_HOOKS_USER1);
-
- // remember files_trashbin state
- $stateFilesTrashbin = \OC_App::isEnabled('files_trashbin');
-
- // we want to tests with app files_trashbin disabled
- \OC_App::disable('files_trashbin');
-
- // make sure that the trash bin is disabled
- $this->assertFalse(\OC_APP::isEnabled('files_trashbin'));
-
- $this->user1View->file_put_contents($this->filename, $this->data);
-
- // check if all keys are generated
- $this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
- . $this->filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
- $this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
-
- // get the file info from previous created file
- $fileInfo = $this->user1View->getFileInfo($this->filename);
-
- // check if we have a valid file info
- $this->assertTrue($fileInfo instanceof \OC\Files\FileInfo);
-
- // share the file with user2
- \OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_ENCRYPTION_HOOKS_USER2, \OCP\Constants::PERMISSION_ALL);
-
- // check if new share key exists
- $this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
- . $this->filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
-
- self::logoutHelper();
- self::loginHelper(self::TEST_ENCRYPTION_HOOKS_USER2);
- \OC_User::setUserId(self::TEST_ENCRYPTION_HOOKS_USER2);
-
- // user2 update the shared file
- $this->user2View->file_put_contents($this->filename, $this->data);
-
- // keys should be stored at user1s dir, not in user2s
- $this->assertFalse($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/'
- . $this->filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
- $this->assertFalse($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
-
- // delete the Shared file from user1 in data/user2/files/Shared
- $result = $this->user2View->unlink($this->filename);
-
- $this->assertTrue($result);
-
- // share key for user2 from user1s home should be gone, all other keys should still exists
- $this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
- . $this->filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
- $this->assertFalse($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
- . $this->filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
- $this->assertTrue($this->rootView->file_exists(
- self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->filename . '/fileKey'));
-
- // cleanup
-
- self::logoutHelper();
- self::loginHelper(self::TEST_ENCRYPTION_HOOKS_USER1);
- \OC_User::setUserId(self::TEST_ENCRYPTION_HOOKS_USER1);
-
- if ($stateFilesTrashbin) {
- \OC_App::enable('files_trashbin');
- }
- else {
- \OC_App::disable('files_trashbin');
- }
- }
-
- function testRenameHook() {
- // create all files to make sure all keys can coexist properly
- foreach (self::$testFiles as $file) {
- // save file with content
- $cryptedFile = file_put_contents('crypt:///' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $file, $this->data);
-
- // test that data was successfully written
- $this->assertTrue(is_int($cryptedFile));
- }
-
- foreach (self::$testFiles as $file) {
- $this->doTestRenameHook($file);
- }
- }
-
- /**
- * test rename operation
- */
- function doTestRenameHook($filename) {
- // check if keys exists
- $this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
- . $filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
-
- $this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
- . $filename . '/fileKey'));
-
- // make subfolder and sub-subfolder
- $this->rootView->mkdir('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder);
- $this->rootView->mkdir('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder . '/' . $this->folder);
-
- $this->assertTrue($this->rootView->is_dir('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder . '/' . $this->folder));
-
- // move the file to the sub-subfolder
- $root = $this->rootView->getRoot();
- $this->rootView->chroot('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/');
- $this->rootView->rename($filename, '/' . $this->folder . '/' . $this->folder . '/' . $filename);
- $this->rootView->chroot($root);
-
- $this->assertFalse($this->rootView->file_exists('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $filename));
- $this->assertTrue($this->rootView->file_exists('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder . '/' . $this->folder . '/' . $filename));
-
- // keys should be renamed too
- $this->assertFalse($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
- . $filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
- $this->assertFalse($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
- . $filename . '/fileKey'));
-
- $this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->folder . '/' . $this->folder . '/'
- . $filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
- $this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->folder . '/' . $this->folder . '/'
- . $filename . '/fileKey'));
-
- // cleanup
- $this->rootView->unlink('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder);
- }
-
- function testCopyHook() {
- // create all files to make sure all keys can coexist properly
- foreach (self::$testFiles as $file) {
- // save file with content
- $cryptedFile = file_put_contents('crypt:///' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $file, $this->data);
-
- // test that data was successfully written
- $this->assertTrue(is_int($cryptedFile));
- }
-
- foreach (self::$testFiles as $file) {
- $this->doTestCopyHook($file);
- }
- }
-
- /**
- * test rename operation
- */
- function doTestCopyHook($filename) {
- // check if keys exists
- $this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
- . $filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
-
- $this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
- . $filename . '/fileKey'));
-
- // make subfolder and sub-subfolder
- $this->rootView->mkdir('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder);
- $this->rootView->mkdir('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder . '/' . $this->folder);
-
- $this->assertTrue($this->rootView->is_dir('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder . '/' . $this->folder));
-
- // copy the file to the sub-subfolder
- \OC\Files\Filesystem::copy($filename, '/' . $this->folder . '/' . $this->folder . '/' . $filename);
-
- $this->assertTrue($this->rootView->file_exists('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $filename));
- $this->assertTrue($this->rootView->file_exists('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder . '/' . $this->folder . '/' . $filename));
-
- // keys should be copied too
- $this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
- . $filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
- $this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
- . $filename . '/fileKey'));
-
- $this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->folder . '/' . $this->folder . '/'
- . $filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
- $this->assertTrue($this->rootView->file_exists(
- '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/' . $this->folder . '/' . $this->folder . '/'
- . $filename . '/fileKey'));
-
- // cleanup
- $this->rootView->unlink('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder);
- $this->rootView->unlink('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $filename);
- }
-
- /**
- * @brief replacing encryption keys during password change should be allowed
- * until the user logged in for the first time
- */
- public function testSetPassphrase() {
-
- $view = new \OC\Files\View();
-
- // set user password for the first time
- \OCA\Files_Encryption\Hooks::postCreateUser(array('uid' => 'newUser', 'password' => 'newUserPassword'));
-
- $this->assertTrue($view->file_exists(\OCA\Files_Encryption\Keymanager::getPublicKeyPath() . '/newUser.publicKey'));
- $this->assertTrue($view->file_exists('newUser/files_encryption/newUser.privateKey'));
-
- // check if we are able to decrypt the private key
- $encryptedKey = \OCA\Files_Encryption\Keymanager::getPrivateKey($view, 'newUser');
- $privateKey = \OCA\Files_Encryption\Crypt::decryptPrivateKey($encryptedKey, 'newUserPassword');
- $this->assertTrue(is_string($privateKey));
-
- // change the password before the user logged-in for the first time,
- // we can replace the encryption keys
- \OCA\Files_Encryption\Hooks::setPassphrase(array('uid' => 'newUser', 'password' => 'passwordChanged'));
-
- $encryptedKey = \OCA\Files_Encryption\Keymanager::getPrivateKey($view, 'newUser');
- $privateKey = \OCA\Files_Encryption\Crypt::decryptPrivateKey($encryptedKey, 'passwordChanged');
- $this->assertTrue(is_string($privateKey));
-
- // now create a files folder to simulate a already used account
- $view->mkdir('/newUser/files');
-
- // change the password after the user logged in, now the password should not change
- \OCA\Files_Encryption\Hooks::setPassphrase(array('uid' => 'newUser', 'password' => 'passwordChanged2'));
-
- $encryptedKey = \OCA\Files_Encryption\Keymanager::getPrivateKey($view, 'newUser');
- $privateKey = \OCA\Files_Encryption\Crypt::decryptPrivateKey($encryptedKey, 'passwordChanged2');
- $this->assertFalse($privateKey);
-
- $privateKey = \OCA\Files_Encryption\Crypt::decryptPrivateKey($encryptedKey, 'passwordChanged');
- $this->assertTrue(is_string($privateKey));
-
- }
-
-}