Bladeren bron

Merge pull request #12568 from owncloud/autoload-encryption-classes

Fix namespaces of encryption classes and encryption tests
tags/v8.0.0alpha1
Joas Schilling 9 jaren geleden
bovenliggende
commit
26861a98c5
43 gewijzigde bestanden met toevoegingen van 685 en 708 verwijderingen
  1. 1
    1
      apps/files/index.php
  2. 4
    3
      apps/files_encryption/ajax/adminrecovery.php
  3. 6
    8
      apps/files_encryption/ajax/changeRecoveryPassword.php
  4. 2
    1
      apps/files_encryption/ajax/getMigrationStatus.php
  5. 7
    9
      apps/files_encryption/ajax/updatePrivateKeyPassword.php
  6. 1
    3
      apps/files_encryption/ajax/userrecovery.php
  7. 6
    21
      apps/files_encryption/appinfo/app.php
  8. 1
    1
      apps/files_encryption/appinfo/routes.php
  9. 1
    1
      apps/files_encryption/exception/encryptionexception.php
  10. 1
    1
      apps/files_encryption/exception/multikeydecryptexception.php
  11. 1
    1
      apps/files_encryption/exception/multikeyencryptexception.php
  12. 4
    4
      apps/files_encryption/files/error.php
  13. 1
    1
      apps/files_encryption/lib/capabilities.php
  14. 6
    6
      apps/files_encryption/lib/crypt.php
  15. 31
    33
      apps/files_encryption/lib/helper.php
  16. 10
    10
      apps/files_encryption/lib/hooks.php
  17. 8
    9
      apps/files_encryption/lib/keymanager.php
  18. 2
    2
      apps/files_encryption/lib/migration.php
  19. 4
    4
      apps/files_encryption/lib/proxy.php
  20. 6
    6
      apps/files_encryption/lib/session.php
  21. 13
    12
      apps/files_encryption/lib/stream.php
  22. 11
    11
      apps/files_encryption/lib/util.php
  23. 1
    1
      apps/files_encryption/settings-admin.php
  24. 2
    2
      apps/files_encryption/settings-personal.php
  25. 1
    1
      apps/files_encryption/templates/invalid_private_key.php
  26. 1
    1
      apps/files_encryption/templates/settings-admin.php
  27. 3
    3
      apps/files_encryption/templates/settings-personal.php
  28. 32
    32
      apps/files_encryption/tests/crypt.php
  29. 25
    25
      apps/files_encryption/tests/helper.php
  30. 47
    47
      apps/files_encryption/tests/hooks.php
  31. 92
    92
      apps/files_encryption/tests/keymanager.php
  32. 12
    12
      apps/files_encryption/tests/migration.php
  33. 17
    17
      apps/files_encryption/tests/proxy.php
  34. 242
    242
      apps/files_encryption/tests/share.php
  35. 12
    12
      apps/files_encryption/tests/stream.php
  36. 6
    8
      apps/files_encryption/tests/testcase.php
  37. 10
    10
      apps/files_encryption/tests/trashbin.php
  38. 30
    30
      apps/files_encryption/tests/util.php
  39. 19
    19
      apps/files_encryption/tests/webdav.php
  40. 2
    2
      apps/files_trashbin/lib/trashbin.php
  41. 2
    2
      lib/private/connector/sabre/file.php
  42. 1
    1
      settings/ajax/decryptall.php
  43. 1
    1
      settings/changepassword/controller.php

+ 1
- 1
apps/files/index.php Bestand weergeven

@@ -69,7 +69,7 @@ $storageInfo=OC_Helper::getStorageInfo('/', $dirInfo);
// if the encryption app is disabled, than everything is fine (INIT_SUCCESSFUL status code)
$encryptionInitStatus = 2;
if (OC_App::isEnabled('files_encryption')) {
$session = new \OCA\Encryption\Session(new \OC\Files\View('/'));
$session = new \OCA\Files_Encryption\Session(new \OC\Files\View('/'));
$encryptionInitStatus = $session->getInitialized();
}


+ 4
- 3
apps/files_encryption/ajax/adminrecovery.php Bestand weergeven

@@ -7,7 +7,8 @@
*
* Script to handle admin settings for encrypted key recovery
*/
use OCA\Encryption;

use OCA\Files_Encryption\Helper;

\OCP\JSON::checkAdminUser();
\OCP\JSON::checkAppEnabled('files_encryption');
@@ -42,7 +43,7 @@ $recoveryKeyId = \OC::$server->getAppConfig()->getValue('files_encryption', 'rec

if (isset($_POST['adminEnableRecovery']) && $_POST['adminEnableRecovery'] === '1') {

$return = \OCA\Encryption\Helper::adminEnableRecovery($recoveryKeyId, $_POST['recoveryPassword']);
$return = Helper::adminEnableRecovery($recoveryKeyId, $_POST['recoveryPassword']);

// Return success or failure
if ($return) {
@@ -56,7 +57,7 @@ if (isset($_POST['adminEnableRecovery']) && $_POST['adminEnableRecovery'] === '1
isset($_POST['adminEnableRecovery'])
&& '0' === $_POST['adminEnableRecovery']
) {
$return = \OCA\Encryption\Helper::adminDisableRecovery($_POST['recoveryPassword']);
$return = Helper::adminDisableRecovery($_POST['recoveryPassword']);

if ($return) {
$successMessage = $l->t('Recovery key successfully disabled');

+ 6
- 8
apps/files_encryption/ajax/changeRecoveryPassword.php Bestand weergeven

@@ -9,8 +9,6 @@
*
*/

use OCA\Encryption;

\OCP\JSON::checkAdminUser();
\OCP\JSON::checkAppEnabled('files_encryption');
\OCP\JSON::callCheck();
@@ -49,21 +47,21 @@ if ($_POST['newPassword'] !== $_POST['confirmPassword']) {
}

$view = new \OC\Files\View('/');
$util = new \OCA\Encryption\Util(new \OC\Files\View('/'), \OCP\User::getUser());
$util = new \OCA\Files_Encryption\Util(new \OC\Files\View('/'), \OCP\User::getUser());

$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;

$keyId = $util->getRecoveryKeyId();

$encryptedRecoveryKey = Encryption\Keymanager::getPrivateSystemKey($keyId);
$decryptedRecoveryKey = $encryptedRecoveryKey ? \OCA\Encryption\Crypt::decryptPrivateKey($encryptedRecoveryKey, $oldPassword) : false;
$encryptedRecoveryKey = \OCA\Files_Encryption\Keymanager::getPrivateSystemKey($keyId);
$decryptedRecoveryKey = $encryptedRecoveryKey ? \OCA\Files_Encryption\Crypt::decryptPrivateKey($encryptedRecoveryKey, $oldPassword) : false;

if ($decryptedRecoveryKey) {
$cipher = \OCA\Encryption\Helper::getCipher();
$encryptedKey = \OCA\Encryption\Crypt::symmetricEncryptFileContent($decryptedRecoveryKey, $newPassword, $cipher);
$cipher = \OCA\Files_Encryption\Helper::getCipher();
$encryptedKey = \OCA\Files_Encryption\Crypt::symmetricEncryptFileContent($decryptedRecoveryKey, $newPassword, $cipher);
if ($encryptedKey) {
\OCA\Encryption\Keymanager::setPrivateSystemKey($encryptedKey, $keyId);
\OCA\Files_Encryption\Keymanager::setPrivateSystemKey($encryptedKey, $keyId);
$return = true;
}
}

+ 2
- 1
apps/files_encryption/ajax/getMigrationStatus.php Bestand weergeven

@@ -6,7 +6,8 @@
*
* check migration status
*/
use OCA\Encryption\Util;

use OCA\Files_Encryption\Util;

\OCP\JSON::checkAppEnabled('files_encryption');


+ 7
- 9
apps/files_encryption/ajax/updatePrivateKeyPassword.php Bestand weergeven

@@ -9,8 +9,6 @@
*
*/

use OCA\Encryption;

\OCP\JSON::checkLoggedIn();
\OCP\JSON::checkAppEnabled('files_encryption');
\OCP\JSON::callCheck();
@@ -24,7 +22,7 @@ $oldPassword = $_POST['oldPassword'];
$newPassword = $_POST['newPassword'];

$view = new \OC\Files\View('/');
$session = new \OCA\Encryption\Session($view);
$session = new \OCA\Files_Encryption\Session($view);
$user = \OCP\User::getUser();
$loginName = \OC::$server->getUserSession()->getLoginName();

@@ -36,14 +34,14 @@ if ($passwordCorrect !== false) {
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;

$encryptedKey = Encryption\Keymanager::getPrivateKey($view, $user);
$decryptedKey = $encryptedKey ? \OCA\Encryption\Crypt::decryptPrivateKey($encryptedKey, $oldPassword) : false;
$encryptedKey = \OCA\Files_Encryption\Keymanager::getPrivateKey($view, $user);
$decryptedKey = $encryptedKey ? \OCA\Files_Encryption\Crypt::decryptPrivateKey($encryptedKey, $oldPassword) : false;

if ($decryptedKey) {
$cipher = \OCA\Encryption\Helper::getCipher();
$encryptedKey = \OCA\Encryption\Crypt::symmetricEncryptFileContent($decryptedKey, $newPassword, $cipher);
$cipher = \OCA\Files_Encryption\Helper::getCipher();
$encryptedKey = \OCA\Files_Encryption\Crypt::symmetricEncryptFileContent($decryptedKey, $newPassword, $cipher);
if ($encryptedKey) {
\OCA\Encryption\Keymanager::setPrivateKey($encryptedKey, $user);
\OCA\Files_Encryption\Keymanager::setPrivateKey($encryptedKey, $user);
$session->setPrivateKey($decryptedKey);
$return = true;
}
@@ -61,7 +59,7 @@ if ($decryptedKey) {

// success or failure
if ($return) {
$session->setInitialized(\OCA\Encryption\Session::INIT_SUCCESSFUL);
$session->setInitialized(\OCA\Files_Encryption\Session::INIT_SUCCESSFUL);
\OCP\JSON::success(array('data' => array('message' => $l->t('Private key password successfully updated.'))));
} else {
\OCP\JSON::error(array('data' => array('message' => $errorMessage)));

+ 1
- 3
apps/files_encryption/ajax/userrecovery.php Bestand weergeven

@@ -7,8 +7,6 @@
* Script to handle admin settings for encrypted key recovery
*/

use OCA\Encryption;

\OCP\JSON::checkLoggedIn();
\OCP\JSON::checkAppEnabled('files_encryption');
\OCP\JSON::callCheck();
@@ -22,7 +20,7 @@ if (

$userId = \OCP\USER::getUser();
$view = new \OC\Files\View('/');
$util = new \OCA\Encryption\Util($view, $userId);
$util = new \OCA\Files_Encryption\Util($view, $userId);

// Save recovery preference to DB
$return = $util->setRecoveryForUser($_POST['userEnableRecovery']);

+ 6
- 21
apps/files_encryption/appinfo/app.php Bestand weergeven

@@ -1,41 +1,26 @@
<?php

OC::$CLASSPATH['OCA\Encryption\Crypt'] = 'files_encryption/lib/crypt.php';
OC::$CLASSPATH['OCA\Encryption\Hooks'] = 'files_encryption/hooks/hooks.php';
OC::$CLASSPATH['OCA\Encryption\Util'] = 'files_encryption/lib/util.php';
OC::$CLASSPATH['OCA\Encryption\Keymanager'] = 'files_encryption/lib/keymanager.php';
OC::$CLASSPATH['OCA\Encryption\Stream'] = 'files_encryption/lib/stream.php';
OC::$CLASSPATH['OCA\Encryption\Proxy'] = 'files_encryption/lib/proxy.php';
OC::$CLASSPATH['OCA\Encryption\Session'] = 'files_encryption/lib/session.php';
OC::$CLASSPATH['OCA\Encryption\Capabilities'] = 'files_encryption/lib/capabilities.php';
OC::$CLASSPATH['OCA\Encryption\Helper'] = 'files_encryption/lib/helper.php';

// Exceptions
OC::$CLASSPATH['OCA\Encryption\Exception\MultiKeyEncryptException'] = 'files_encryption/exception/multiKeyEncryptException.php';
OC::$CLASSPATH['OCA\Encryption\Exception\MultiKeyDecryptException'] = 'files_encryption/exception/multiKeyDecryptException.php';
OC::$CLASSPATH['OCA\Encryption\Exception\EncryptionException'] = 'files_encryption/exception/encryptionException.php';

\OCP\Util::addTranslations('files_encryption');
\OCP\Util::addscript('files_encryption', 'encryption');
\OCP\Util::addscript('files_encryption', 'detect-migration');

if (!OC_Config::getValue('maintenance', false)) {
OC_FileProxy::register(new OCA\Encryption\Proxy());
OC_FileProxy::register(new OCA\Files_Encryption\Proxy());

// User related hooks
OCA\Encryption\Helper::registerUserHooks();
OCA\Files_Encryption\Helper::registerUserHooks();

// Sharing related hooks
OCA\Encryption\Helper::registerShareHooks();
OCA\Files_Encryption\Helper::registerShareHooks();

// Filesystem related hooks
OCA\Encryption\Helper::registerFilesystemHooks();
OCA\Files_Encryption\Helper::registerFilesystemHooks();

// App manager related hooks
OCA\Encryption\Helper::registerAppHooks();
OCA\Files_Encryption\Helper::registerAppHooks();

if(!in_array('crypt', stream_get_wrappers())) {
stream_wrapper_register('crypt', 'OCA\Encryption\Stream');
stream_wrapper_register('crypt', 'OCA\Files_Encryption\Stream');
}
} else {
// logout user if we are in maintenance to force re-login

+ 1
- 1
apps/files_encryption/appinfo/routes.php Bestand weergeven

@@ -19,4 +19,4 @@ $this->create('files_encryption_ajax_userrecovery', 'ajax/userrecovery.php')
->actionInclude('files_encryption/ajax/userrecovery.php');

// Register with the capabilities API
OC_API::register('get', '/cloud/capabilities', array('OCA\Encryption\Capabilities', 'getCapabilities'), 'files_encryption', OC_API::USER_AUTH);
OC_API::register('get', '/cloud/capabilities', array('OCA\Files_Encryption\Capabilities', 'getCapabilities'), 'files_encryption', OC_API::USER_AUTH);

apps/files_encryption/exception/encryptionException.php → apps/files_encryption/exception/encryptionexception.php Bestand weergeven

@@ -21,7 +21,7 @@
*
*/

namespace OCA\Encryption\Exception;
namespace OCA\Files_Encryption\Exception;

/**
* Base class for all encryption exception

apps/files_encryption/exception/multiKeyDecryptException.php → apps/files_encryption/exception/multikeydecryptexception.php Bestand weergeven

@@ -21,7 +21,7 @@
*
*/

namespace OCA\Encryption\Exception;
namespace OCA\Files_Encryption\Exception;

/**
* Throw this encryption if multi key decryption failed

apps/files_encryption/exception/multiKeyEncryptException.php → apps/files_encryption/exception/multikeyencryptexception.php Bestand weergeven

@@ -21,7 +21,7 @@
*
*/

namespace OCA\Encryption\Exception;
namespace OCA\Files_Encryption\Exception;

/**
* Throw this exception if multi key encrytion fails

+ 4
- 4
apps/files_encryption/files/error.php Bestand weergeven

@@ -12,14 +12,14 @@ if (!isset($_)) { //also provide standalone error page
if (isset($_GET['errorCode'])) {
$errorCode = $_GET['errorCode'];
switch ($errorCode) {
case \OCA\Encryption\Crypt::ENCRYPTION_NOT_INITIALIZED_ERROR:
case \OCA\Files_Encryption\Crypt::ENCRYPTION_NOT_INITIALIZED_ERROR:
$errorMsg = $l->t('Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app.');
break;
case \OCA\Encryption\Crypt::ENCRYPTION_PRIVATE_KEY_NOT_VALID_ERROR:
case \OCA\Files_Encryption\Crypt::ENCRYPTION_PRIVATE_KEY_NOT_VALID_ERROR:
$theme = new OC_Defaults();
$errorMsg = $l->t('Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files.', array($theme->getName()));
break;
case \OCA\Encryption\Crypt::ENCRYPTION_NO_SHARE_KEY_FOUND:
case \OCA\Files_Encryption\Crypt::ENCRYPTION_NO_SHARE_KEY_FOUND:
$errorMsg = $l->t('Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you.');
break;
default:
@@ -27,7 +27,7 @@ if (!isset($_)) { //also provide standalone error page
break;
}
} else {
$errorCode = \OCA\Encryption\Crypt::ENCRYPTION_UNKNOWN_ERROR;
$errorCode = \OCA\Files_Encryption\Crypt::ENCRYPTION_UNKNOWN_ERROR;
$errorMsg = $l->t("Unknown error. Please check your system settings or contact your administrator");
}


+ 1
- 1
apps/files_encryption/lib/capabilities.php Bestand weergeven

@@ -6,7 +6,7 @@
* See the COPYING-README file.
*/
namespace OCA\Encryption;
namespace OCA\Files_Encryption;

class Capabilities {

+ 6
- 6
apps/files_encryption/lib/crypt.php Bestand weergeven

@@ -25,7 +25,7 @@
*
*/
namespace OCA\Encryption;
namespace OCA\Files_Encryption;
/**
* Class for common cryptography functionality
@@ -133,7 +133,7 @@ class Crypt {
* Check if a file's contents contains an IV and is symmetrically encrypted
* @param string $content
* @return boolean
* @note see also OCA\Encryption\Util->isEncryptedPath()
* @note see also \OCA\Files_Encryption\Util->isEncryptedPath()
*/
public static function isCatfileContent($content) {
@@ -190,7 +190,7 @@ class Crypt {
* @param string $passphrase
* @param string $cypher used for encryption, currently we support AES-128-CFB and AES-256-CFB
* @return string encrypted file content
* @throws \OCA\Encryption\Exception\EncryptionException
* @throws \OCA\Files_Encryption\Exception\EncryptionException
*/
private static function encrypt($plainContent, $iv, $passphrase = '', $cipher = Crypt::DEFAULT_CIPHER) {
@@ -379,7 +379,7 @@ class Crypt {
* @param string $plainContent content to be encrypted
* @param array $publicKeys array keys must be the userId of corresponding user
* @return array keys: keys (array, key = userId), data
* @throws \OCA\Encryption\Exception\MultiKeyEncryptException if encryption failed
* @throws \OCA\Files_Encryption\Exception\MultiKeyEncryptException if encryption failed
* @note symmetricDecryptFileContent() can decrypt files created using this method
*/
public static function multiKeyEncrypt($plainContent, array $publicKeys) {
@@ -425,7 +425,7 @@ class Crypt {
* @param string $encryptedContent
* @param string $shareKey
* @param mixed $privateKey
* @throws \OCA\Encryption\Exception\MultiKeyDecryptException if decryption failed
* @throws \OCA\Files_Encryption\Exception\MultiKeyDecryptException if decryption failed
* @internal param string $plainContent contains decrypted content
* @return string $plainContent decrypted string
* @note symmetricDecryptFileContent() can be used to decrypt files created using this method
@@ -554,7 +554,7 @@ class Crypt {
* get chiper from header
*
* @param array $header
* @throws \OCA\Encryption\Exception\EncryptionException
* @throws \OCA\Files_Encryption\Exception\EncryptionException
*/
public static function getCipher($header) {
$cipher = isset($header['cipher']) ? $header['cipher'] : 'AES-128-CFB';

+ 31
- 33
apps/files_encryption/lib/helper.php Bestand weergeven

@@ -23,11 +23,11 @@
*
*/

namespace OCA\Encryption;
namespace OCA\Files_Encryption;

/**
* Class to manage registration of hooks an various helper methods
* @package OCA\Encryption
* @package OCA\Files_Encryption
*/
class Helper {

@@ -39,9 +39,9 @@ class Helper {
*/
public static function registerShareHooks() {

\OCP\Util::connectHook('OCP\Share', 'pre_shared', 'OCA\Encryption\Hooks', 'preShared');
\OCP\Util::connectHook('OCP\Share', 'post_shared', 'OCA\Encryption\Hooks', 'postShared');
\OCP\Util::connectHook('OCP\Share', 'post_unshare', 'OCA\Encryption\Hooks', 'postUnshare');
\OCP\Util::connectHook('OCP\Share', 'pre_shared', 'OCA\Files_Encryption\Hooks', 'preShared');
\OCP\Util::connectHook('OCP\Share', 'post_shared', 'OCA\Files_Encryption\Hooks', 'postShared');
\OCP\Util::connectHook('OCP\Share', 'post_unshare', 'OCA\Files_Encryption\Hooks', 'postUnshare');
}

/**
@@ -50,12 +50,12 @@ class Helper {
*/
public static function registerUserHooks() {

\OCP\Util::connectHook('OC_User', 'post_login', 'OCA\Encryption\Hooks', 'login');
\OCP\Util::connectHook('OC_User', 'logout', 'OCA\Encryption\Hooks', 'logout');
\OCP\Util::connectHook('OC_User', 'post_setPassword', 'OCA\Encryption\Hooks', 'setPassphrase');
\OCP\Util::connectHook('OC_User', 'pre_setPassword', 'OCA\Encryption\Hooks', 'preSetPassphrase');
\OCP\Util::connectHook('OC_User', 'post_createUser', 'OCA\Encryption\Hooks', 'postCreateUser');
\OCP\Util::connectHook('OC_User', 'post_deleteUser', 'OCA\Encryption\Hooks', 'postDeleteUser');
\OCP\Util::connectHook('OC_User', 'post_login', 'OCA\Files_Encryption\Hooks', 'login');
\OCP\Util::connectHook('OC_User', 'logout', 'OCA\Files_Encryption\Hooks', 'logout');
\OCP\Util::connectHook('OC_User', 'post_setPassword', 'OCA\Files_Encryption\Hooks', 'setPassphrase');
\OCP\Util::connectHook('OC_User', 'pre_setPassword', 'OCA\Files_Encryption\Hooks', 'preSetPassphrase');
\OCP\Util::connectHook('OC_User', 'post_createUser', 'OCA\Files_Encryption\Hooks', 'postCreateUser');
\OCP\Util::connectHook('OC_User', 'post_deleteUser', 'OCA\Files_Encryption\Hooks', 'postDeleteUser');
}

/**
@@ -64,15 +64,15 @@ class Helper {
*/
public static function registerFilesystemHooks() {

\OCP\Util::connectHook('OC_Filesystem', 'rename', 'OCA\Encryption\Hooks', 'preRename');
\OCP\Util::connectHook('OC_Filesystem', 'post_rename', 'OCA\Encryption\Hooks', 'postRenameOrCopy');
\OCP\Util::connectHook('OC_Filesystem', 'copy', 'OCA\Encryption\Hooks', 'preCopy');
\OCP\Util::connectHook('OC_Filesystem', 'post_copy', 'OCA\Encryption\Hooks', 'postRenameOrCopy');
\OCP\Util::connectHook('OC_Filesystem', 'post_delete', 'OCA\Encryption\Hooks', 'postDelete');
\OCP\Util::connectHook('OC_Filesystem', 'delete', 'OCA\Encryption\Hooks', 'preDelete');
\OCP\Util::connectHook('\OC\Core\LostPassword\Controller\LostController', 'post_passwordReset', 'OCA\Encryption\Hooks', 'postPasswordReset');
\OCP\Util::connectHook('OC_Filesystem', 'post_umount', 'OCA\Encryption\Hooks', 'postUnmount');
\OCP\Util::connectHook('OC_Filesystem', 'umount', 'OCA\Encryption\Hooks', 'preUnmount');
\OCP\Util::connectHook('OC_Filesystem', 'rename', 'OCA\Files_Encryption\Hooks', 'preRename');
\OCP\Util::connectHook('OC_Filesystem', 'post_rename', 'OCA\Files_Encryption\Hooks', 'postRenameOrCopy');
\OCP\Util::connectHook('OC_Filesystem', 'copy', 'OCA\Files_Encryption\Hooks', 'preCopy');
\OCP\Util::connectHook('OC_Filesystem', 'post_copy', 'OCA\Files_Encryption\Hooks', 'postRenameOrCopy');
\OCP\Util::connectHook('OC_Filesystem', 'post_delete', 'OCA\Files_Encryption\Hooks', 'postDelete');
\OCP\Util::connectHook('OC_Filesystem', 'delete', 'OCA\Files_Encryption\Hooks', 'preDelete');
\OCP\Util::connectHook('\OC\Core\LostPassword\Controller\LostController', 'post_passwordReset', 'OCA\Files_Encryption\Hooks', 'postPasswordReset');
\OCP\Util::connectHook('OC_Filesystem', 'post_umount', 'OCA\Files_Encryption\Hooks', 'postUnmount');
\OCP\Util::connectHook('OC_Filesystem', 'umount', 'OCA\Files_Encryption\Hooks', 'preUnmount');
}

/**
@@ -81,8 +81,8 @@ class Helper {
*/
public static function registerAppHooks() {

\OCP\Util::connectHook('OC_App', 'pre_disable', 'OCA\Encryption\Hooks', 'preDisable');
\OCP\Util::connectHook('OC_App', 'post_disable', 'OCA\Encryption\Hooks', 'postEnable');
\OCP\Util::connectHook('OC_App', 'pre_disable', 'OCA\Files_Encryption\Hooks', 'preDisable');
\OCP\Util::connectHook('OC_App', 'post_disable', 'OCA\Files_Encryption\Hooks', 'postEnable');
}

/**
@@ -131,8 +131,6 @@ class Helper {
*
* @param string $recoveryKeyId
* @param string $recoveryPassword
* @internal param \OCA\Encryption\Util $util
* @internal param string $password
* @return bool
*/
public static function adminEnableRecovery($recoveryKeyId, $recoveryPassword) {
@@ -147,13 +145,13 @@ class Helper {

if (!Keymanager::recoveryKeyExists($view)) {

$keypair = \OCA\Encryption\Crypt::createKeypair();
$keypair = Crypt::createKeypair();

// Save public key
Keymanager::setPublicKey($keypair['publicKey'], $recoveryKeyId);

$cipher = \OCA\Encryption\Helper::getCipher();
$encryptedKey = \OCA\Encryption\Crypt::symmetricEncryptFileContent($keypair['privateKey'], $recoveryPassword, $cipher);
$cipher = Helper::getCipher();
$encryptedKey = Crypt::symmetricEncryptFileContent($keypair['privateKey'], $recoveryPassword, $cipher);
if ($encryptedKey) {
Keymanager::setPrivateSystemKey($encryptedKey, $recoveryKeyId);
// Set recoveryAdmin as enabled
@@ -162,7 +160,7 @@ class Helper {
}

} else { // get recovery key and check the password
$util = new \OCA\Encryption\Util(new \OC\Files\View('/'), \OCP\User::getUser());
$util = new Util(new \OC\Files\View('/'), \OCP\User::getUser());
$return = $util->checkRecoveryPassword($recoveryPassword);
if ($return) {
$appConfig->setValue('files_encryption', 'recoveryAdminEnabled', 1);
@@ -362,14 +360,14 @@ class Helper {
if ($errorCode === null) {
$init = $session->getInitialized();
switch ($init) {
case \OCA\Encryption\Session::INIT_EXECUTED:
$errorCode = \OCA\Encryption\Crypt::ENCRYPTION_PRIVATE_KEY_NOT_VALID_ERROR;
case Session::INIT_EXECUTED:
$errorCode = Crypt::ENCRYPTION_PRIVATE_KEY_NOT_VALID_ERROR;
break;
case \OCA\Encryption\Session::NOT_INITIALIZED:
$errorCode = \OCA\Encryption\Crypt::ENCRYPTION_NOT_INITIALIZED_ERROR;
case Session::NOT_INITIALIZED:
$errorCode = Crypt::ENCRYPTION_NOT_INITIALIZED_ERROR;
break;
default:
$errorCode = \OCA\Encryption\Crypt::ENCRYPTION_UNKNOWN_ERROR;
$errorCode = Crypt::ENCRYPTION_UNKNOWN_ERROR;
}
}


apps/files_encryption/hooks/hooks.php → apps/files_encryption/lib/hooks.php Bestand weergeven

@@ -23,7 +23,7 @@
*
*/
namespace OCA\Encryption;
namespace OCA\Files_Encryption;
use OC\Files\Filesystem;
@@ -59,7 +59,7 @@ class Hooks {
\OC_Util::setupFS($params['uid']);
}
$privateKey = \OCA\Encryption\Keymanager::getPrivateKey($view, $params['uid']);
$privateKey = Keymanager::getPrivateKey($view, $params['uid']);
// if no private key exists, check server configuration
if (!$privateKey) {
@@ -128,7 +128,7 @@ class Hooks {
* remove keys from session during logout
*/
public static function logout() {
$session = new \OCA\Encryption\Session(new \OC\Files\View());
$session = new Session(new \OC\Files\View());
$session->removeKeys();
}
@@ -182,7 +182,7 @@ class Hooks {
if (Crypt::mode() === 'server') {
$view = new \OC\Files\View('/');
$session = new \OCA\Encryption\Session($view);
$session = new Session($view);
// Get existing decrypted private key
$privateKey = $session->getPrivateKey();
@@ -236,7 +236,7 @@ class Hooks {
Keymanager::setPublicKey($keypair['publicKey'], $user);
// Encrypt private key with new password
$encryptedKey = \OCA\Encryption\Crypt::symmetricEncryptFileContent($keypair['privateKey'], $newUserPassword, Helper::getCipher());
$encryptedKey = Crypt::symmetricEncryptFileContent($keypair['privateKey'], $newUserPassword, Helper::getCipher());
if ($encryptedKey) {
Keymanager::setPrivateKey($encryptedKey, $user);
@@ -331,7 +331,7 @@ class Hooks {
private static function updateKeyfiles($path) {
$view = new \OC\Files\View('/');
$userId = \OCP\User::getUser();
$session = new \OCA\Encryption\Session($view);
$session = new Session($view);
$util = new Util($view, $userId);
$sharingEnabled = \OCP\Share::isEnabled();
@@ -504,8 +504,8 @@ class Hooks {
\OC::$server->getConfig()->deleteAppFromAllUsers('files_encryption');
$session = new \OCA\Encryption\Session(new \OC\Files\View('/'));
$session->setInitialized(\OCA\Encryption\Session::NOT_INITIALIZED);
$session = new Session(new \OC\Files\View('/'));
$session->setInitialized(Session::NOT_INITIALIZED);
}
}
@@ -515,8 +515,8 @@ class Hooks {
*/
public static function postEnable($params) {
if ($params['app'] === 'files_encryption') {
$session = new \OCA\Encryption\Session(new \OC\Files\View('/'));
$session->setInitialized(\OCA\Encryption\Session::NOT_INITIALIZED);
$session = new Session(new \OC\Files\View('/'));
$session->setInitialized(Session::NOT_INITIALIZED);
}
}

+ 8
- 9
apps/files_encryption/lib/keymanager.php Bestand weergeven

@@ -22,7 +22,7 @@
*
*/

namespace OCA\Encryption;
namespace OCA\Files_Encryption;

/**
* Class to manage storage and retrieval of encryption keys
@@ -141,7 +141,7 @@ class Keymanager {
* store file encryption key
*
* @param \OC\Files\View $view
* @param \OCA\Encryption\Util $util
* @param \OCA\Files_Encryption\Util $util
* @param string $path relative path of the file, including filename
* @param string $catfile keyfile content
* @return bool true/false
@@ -158,7 +158,7 @@ class Keymanager {
* get path to key folder for a given file
*
* @param \OC\Files\View $view relative to data directory
* @param \OCA\Encryption\Util $util
* @param \OCA\Files_Encryption\Util $util
* @param string $path path to the file, relative to the users file directory
* @return string
*/
@@ -186,7 +186,7 @@ class Keymanager {
* get path to file key for a given file
*
* @param \OC\Files\View $view relative to data directory
* @param \OCA\Encryption\Util $util
* @param \OCA\Files_Encryption\Util $util
* @param string $path path to the file, relative to the users file directory
* @return string
*/
@@ -199,7 +199,7 @@ class Keymanager {
* get path to share key for a given user
*
* @param \OC\Files\View $view relateive to data directory
* @param \OCA\Encryption\Util $util
* @param \OCA\Files_Encryption\Util $util
* @param string $path path to file relative to the users files directoy
* @param string $uid user for whom we want the share-key path
* @retrun string
@@ -243,9 +243,8 @@ class Keymanager {
/**
* retrieve keyfile for an encrypted file
* @param \OC\Files\View $view
* @param \OCA\Encryption\Util $util
* @param \OCA\Files_Encryption\Util $util
* @param string|false $filePath
* @internal param \OCA\Encryption\file $string name
* @return string file key or false
* @note The keyfile returned is asymmetrically encrypted. Decryption
* of the keyfile must be performed by client code
@@ -347,7 +346,7 @@ class Keymanager {
/**
* store multiple share keys for a single file
* @param \OC\Files\View $view
* @param \OCA\Encryption\Util $util
* @param \OCA\Files_Encryption\Util $util
* @param string $path
* @param array $shareKeys
* @return bool
@@ -376,7 +375,7 @@ class Keymanager {
* retrieve shareKey for an encrypted file
* @param \OC\Files\View $view
* @param string $userId
* @param \OCA\Encryption\Util $util
* @param \OCA\Files_Encryption\Util $util
* @param string $filePath
* @return string file key or false
* @note The sharekey returned is encrypted. Decryption

+ 2
- 2
apps/files_encryption/lib/migration.php Bestand weergeven

@@ -35,8 +35,8 @@ class Migration {

public function __construct() {
$this->view = new \OC\Files\View();
$this->public_share_key_id = \OCA\Encryption\Helper::getPublicShareKeyId();
$this->recovery_key_id = \OCA\Encryption\Helper::getRecoveryKeyId();
$this->public_share_key_id = Helper::getPublicShareKeyId();
$this->recovery_key_id = Helper::getRecoveryKeyId();
}

public function reorganizeFolderStructure() {

+ 4
- 4
apps/files_encryption/lib/proxy.php Bestand weergeven

@@ -30,11 +30,11 @@
* webui.
*/

namespace OCA\Encryption;
namespace OCA\Files_Encryption;

/**
* Class Proxy
* @package OCA\Encryption
* @package OCA\Files_Encryption
*/
class Proxy extends \OC_FileProxy {

@@ -130,7 +130,7 @@ class Proxy extends \OC_FileProxy {
$view = new \OC\Files\View('/');

// get relative path
$relativePath = \OCA\Encryption\Helper::stripUserFilesPath($path);
$relativePath = Helper::stripUserFilesPath($path);

if (!isset($relativePath)) {
return true;
@@ -338,7 +338,7 @@ class Proxy extends \OC_FileProxy {
}

// get relative path
$relativePath = \OCA\Encryption\Helper::stripUserFilesPath($path);
$relativePath = Helper::stripUserFilesPath($path);

// if path is empty we cannot resolve anything
if (empty($relativePath)) {

+ 6
- 6
apps/files_encryption/lib/session.php Bestand weergeven

@@ -22,7 +22,7 @@
*
*/

namespace OCA\Encryption;
namespace OCA\Files_Encryption;

/**
* Class for handling encryption related session data
@@ -72,8 +72,8 @@ class Session {
Keymanager::setPublicKey($keypair['publicKey'], $publicShareKeyId);

// Encrypt private key empty passphrase
$cipher = \OCA\Encryption\Helper::getCipher();
$encryptedKey = \OCA\Encryption\Crypt::symmetricEncryptFileContent($keypair['privateKey'], '', $cipher);
$cipher = Helper::getCipher();
$encryptedKey = Crypt::symmetricEncryptFileContent($keypair['privateKey'], '', $cipher);
if ($encryptedKey) {
Keymanager::setPrivateSystemKey($encryptedKey, $publicShareKeyId);
} else {
@@ -82,7 +82,7 @@ class Session {

}

if (\OCA\Encryption\Helper::isPublicAccess() && !self::getPublicSharePrivateKey()) {
if (Helper::isPublicAccess() && !self::getPublicSharePrivateKey()) {
// Disable encryption proxy to prevent recursive calls
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
@@ -151,7 +151,7 @@ class Session {
public function getInitialized() {
if (!is_null(\OC::$server->getSession()->get('encryptionInitialized'))) {
return \OC::$server->getSession()->get('encryptionInitialized');
} else if (\OCA\Encryption\Helper::isPublicAccess() && self::getPublicSharePrivateKey()) {
} else if (Helper::isPublicAccess() && self::getPublicSharePrivateKey()) {
return self::INIT_SUCCESSFUL;
} else {
return self::NOT_INITIALIZED;
@@ -165,7 +165,7 @@ class Session {
*/
public function getPrivateKey() {
// return the public share private key if this is a public access
if (\OCA\Encryption\Helper::isPublicAccess()) {
if (Helper::isPublicAccess()) {
return self::getPublicSharePrivateKey();
} else {
if (!is_null(\OC::$server->getSession()->get('privateKey'))) {

+ 13
- 12
apps/files_encryption/lib/stream.php Bestand weergeven

@@ -30,8 +30,9 @@
* and then fopen('crypt://streams/foo');
*/

namespace OCA\Encryption;
use OCA\Encryption\Exception\EncryptionException;
namespace OCA\Files_Encryption;

use OCA\Files_Encryption\Exception\EncryptionException;

/**
* Provides 'crypt://' stream wrapper protocol.
@@ -81,7 +82,7 @@ class Stream {
private $rootView; // a fsview object set to '/'

/**
* @var \OCA\Encryption\Session
* @var \OCA\Files_Encryption\Session
*/
private $session;
private $privateKey;
@@ -92,7 +93,7 @@ class Stream {
* @param int $options
* @param string $opened_path
* @return bool
* @throw \OCA\Encryption\Exception\EncryptionException
* @throw \OCA\Files_Encryption\Exception\EncryptionException
*/
public function stream_open($path, $mode, $options, &$opened_path) {

@@ -106,7 +107,7 @@ class Stream {
$this->rootView = new \OC\Files\View('/');
}

$this->session = new \OCA\Encryption\Session($this->rootView);
$this->session = new Session($this->rootView);

$this->privateKey = $this->session->getPrivateKey();
if ($this->privateKey === false) {
@@ -162,7 +163,7 @@ class Stream {

if($this->privateKey === false) {
// if private key is not valid redirect user to a error page
\OCA\Encryption\Helper::redirectToErrorPage($this->session);
Helper::redirectToErrorPage($this->session);
}

$this->size = $this->rootView->filesize($this->rawPath);
@@ -251,7 +252,7 @@ class Stream {
/**
* @param int $count
* @return bool|string
* @throws \OCA\Encryption\Exception\EncryptionException
* @throws \OCA\Files_Encryption\Exception\EncryptionException
*/
public function stream_read($count) {

@@ -329,7 +330,7 @@ class Stream {

// Fetch and decrypt keyfile
// Fetch existing keyfile
$util = new \OCA\Encryption\Util($this->rootView, $this->userId);
$util = new Util($this->rootView, $this->userId);
$this->encKeyfile = Keymanager::getFileKey($this->rootView, $util, $this->relPath);

// If a keyfile already exists
@@ -340,13 +341,13 @@ class Stream {
// if there is no valid private key return false
if ($this->privateKey === false) {
// if private key is not valid redirect user to a error page
\OCA\Encryption\Helper::redirectToErrorPage($this->session);
Helper::redirectToErrorPage($this->session);
return false;
}

if ($shareKey === false) {
// if no share key is available redirect user to a error page
\OCA\Encryption\Helper::redirectToErrorPage($this->session, \OCA\Encryption\Crypt::ENCRYPTION_NO_SHARE_KEY_FOUND);
Helper::redirectToErrorPage($this->session, Crypt::ENCRYPTION_NO_SHARE_KEY_FOUND);
return false;
}

@@ -367,7 +368,7 @@ class Stream {
/**
* write header at beginning of encrypted file
*
* @throws Exception\EncryptionException
* @throws \OCA\Files_Encryption\Exception\EncryptionException
*/
private function writeHeader() {

@@ -589,7 +590,7 @@ class Stream {
}

// if private key is not valid redirect user to a error page
\OCA\Encryption\Helper::redirectToErrorPage($this->session);
Helper::redirectToErrorPage($this->session);
}

if (

+ 11
- 11
apps/files_encryption/lib/util.php Bestand weergeven

@@ -23,7 +23,7 @@
*
*/

namespace OCA\Encryption;
namespace OCA\Files_Encryption;

/**
* Class for utilities relating to encrypted file storage system
@@ -83,7 +83,7 @@ class Util {
// make sure that the owners home is mounted
\OC\Files\Filesystem::initMountPoints($userId);

if (\OCA\Encryption\Helper::isPublicAccess()) {
if (Helper::isPublicAccess()) {
$this->keyId = $this->publicShareKeyId;
$this->isPublic = true;
} else {
@@ -277,7 +277,7 @@ class Util {
if ($file !== "." && $file !== "..") {

$filePath = $directory . '/' . $this->view->getRelativePath('/' . $file);
$relPath = \OCA\Encryption\Helper::stripUserFilesPath($filePath);
$relPath = Helper::stripUserFilesPath($filePath);

// If the path is a directory, search
// its contents
@@ -451,13 +451,13 @@ class Util {
}
}
fclose($stream);
$relPath = \OCA\Encryption\Helper::stripUserFilesPath($path);
$relPath = Helper::stripUserFilesPath($path);
$shareKey = Keymanager::getShareKey($this->view, $this->keyId, $this, $relPath);
if($shareKey===false) {
\OC_FileProxy::$enabled = $proxyStatus;
return $result;
}
$session = new \OCA\Encryption\Session($this->view);
$session = new Session($this->view);
$privateKey = $session->getPrivateKey();
$plainKeyfile = $this->decryptKeyfile($relPath, $privateKey);
$plainKey = Crypt::multiKeyDecrypt($plainKeyfile, $shareKey, $privateKey);
@@ -1040,7 +1040,7 @@ class Util {
// Make sure that a share key is generated for the owner too
list($owner, $ownerPath) = $this->getUidAndFilename($filePath);

$ownerPath = \OCA\Encryption\Helper::stripPartialFileExtension($ownerPath);
$ownerPath = Helper::stripPartialFileExtension($ownerPath);

// always add owner to the list of users with access to the file
$userIds = array($owner);
@@ -1402,7 +1402,7 @@ class Util {
if ($this->view->is_dir($this->userFilesDir . '/' . $filePath)) {
$this->addRecoveryKeys($filePath . '/');
} else {
$session = new \OCA\Encryption\Session(new \OC\Files\View('/'));
$session = new Session(new \OC\Files\View('/'));
$sharingEnabled = \OCP\Share::isEnabled();
$usersSharing = $this->getSharingUsersArray($sharingEnabled, $filePath);
$this->setSharedFileKeyfiles($session, $usersSharing, $filePath);
@@ -1559,10 +1559,10 @@ class Util {
*/
public function initEncryption($params) {

$session = new \OCA\Encryption\Session($this->view);
$session = new Session($this->view);

// we tried to initialize the encryption app for this session
$session->setInitialized(\OCA\Encryption\Session::INIT_EXECUTED);
$session->setInitialized(Session::INIT_EXECUTED);

$encryptedKey = Keymanager::getPrivateKey($this->view, $params['uid']);

@@ -1578,7 +1578,7 @@ class Util {
}

$session->setPrivateKey($privateKey);
$session->setInitialized(\OCA\Encryption\Session::INIT_SUCCESSFUL);
$session->setInitialized(Session::INIT_SUCCESSFUL);

return $session;
}
@@ -1587,7 +1587,7 @@ class Util {
* remove encryption related keys from the session
*/
public function closeEncryptionSession() {
$session = new \OCA\Encryption\Session($this->view);
$session = new Session($this->view);
$session->closeSession();
}


+ 1
- 1
apps/files_encryption/settings-admin.php Bestand weergeven

@@ -12,7 +12,7 @@ $tmpl = new OCP\Template('files_encryption', 'settings-admin');

// Check if an adminRecovery account is enabled for recovering files after lost pwd
$recoveryAdminEnabled = \OC::$server->getAppConfig()->getValue('files_encryption', 'recoveryAdminEnabled', '0');
$session = new \OCA\Encryption\Session(new \OC\Files\View('/'));
$session = new \OCA\Files_Encryption\Session(new \OC\Files\View('/'));
$initStatus = $session->getInitialized();

$tmpl->assign('recoveryEnabled', $recoveryAdminEnabled);

+ 2
- 2
apps/files_encryption/settings-personal.php Bestand weergeven

@@ -13,8 +13,8 @@ $tmpl = new OCP\Template('files_encryption', 'settings-personal');
$user = \OCP\USER::getUser();
$view = new \OC\Files\View('/');
$util = new \OCA\Encryption\Util($view, $user);
$session = new \OCA\Encryption\Session($view);
$util = new \OCA\Files_Encryption\Util($view, $user);
$session = new \OCA\Files_Encryption\Session($view);
$privateKeySet = $session->getPrivateKey() !== false;
// did we tried to initialize the keys for this session?

+ 1
- 1
apps/files_encryption/templates/invalid_private_key.php Bestand weergeven

@@ -4,7 +4,7 @@

<?php p($_['message']); ?>
<br/>
<?php if($_['errorCode'] === \OCA\Encryption\Crypt::ENCRYPTION_PRIVATE_KEY_NOT_VALID_ERROR): ?>
<?php if($_['errorCode'] === \OCA\Files_Encryption\Crypt::ENCRYPTION_PRIVATE_KEY_NOT_VALID_ERROR): ?>
<?php p($l->t('Go directly to your %spersonal settings%s.', array('<a href="'.$location.'">', '</a>'))); ?>
<?php endif; ?>
<br/>

+ 1
- 1
apps/files_encryption/templates/settings-admin.php Bestand weergeven

@@ -1,7 +1,7 @@
<form id="encryption" class="section">
<h2><?php p($l->t('Encryption')); ?></h2>

<?php if($_["initStatus"] === \OCA\Encryption\Session::NOT_INITIALIZED): ?>
<?php if($_["initStatus"] === \OCA\Files_Encryption\Session::NOT_INITIALIZED): ?>
<?php p($l->t("Encryption App is enabled but your keys are not initialized, please log-out and log-in again")); ?>
<?php else: ?>
<p id="encryptionSetRecoveryKey">

+ 3
- 3
apps/files_encryption/templates/settings-personal.php Bestand weergeven

@@ -1,11 +1,11 @@
<form id="encryption" class="section">
<h2><?php p( $l->t( 'Encryption' ) ); ?></h2>
<?php if ( $_["initialized"] === \OCA\Encryption\Session::NOT_INITIALIZED ): ?>
<?php if ( $_["initialized"] === \OCA\Files_Encryption\Session::NOT_INITIALIZED ): ?>
<?php p($l->t("Encryption App is enabled but your keys are not initialized, please log-out and log-in again")); ?>
<?php elseif ( $_["initialized"] === \OCA\Encryption\Session::INIT_EXECUTED ): ?>
<?php elseif ( $_["initialized"] === \OCA\Files_Encryption\Session::INIT_EXECUTED ): ?>
<p>
<a name="changePKPasswd" />
<label for="changePrivateKeyPasswd">
@@ -37,7 +37,7 @@
<span class="msg"></span>
</p>
<?php elseif ( $_["recoveryEnabled"] && $_["privateKeySet"] && $_["initialized"] === \OCA\Encryption\Session::INIT_SUCCESSFUL ): ?>
<?php elseif ( $_["recoveryEnabled"] && $_["privateKeySet"] && $_["initialized"] === \OCA\Files_Encryption\Session::INIT_SUCCESSFUL ): ?>
<br />
<p id="userEnableRecovery">
<label for="userEnableRecovery"><?php p( $l->t( "Enable password recovery:" ) ); ?></label>

+ 32
- 32
apps/files_encryption/tests/crypt.php Bestand weergeven

@@ -7,12 +7,12 @@
* See the COPYING-README file.
*/

use OCA\Encryption;
namespace OCA\Files_Encryption\Tests;

/**
* Class Test_Encryption_Crypt
* Class Crypt
*/
class Test_Encryption_Crypt extends \OCA\Files_Encryption\Tests\TestCase {
class Crypt extends TestCase {

const TEST_ENCRYPTION_CRYPT_USER1 = "test-crypt-user1";

@@ -23,7 +23,7 @@ class Test_Encryption_Crypt extends \OCA\Files_Encryption\Tests\TestCase {
public $dataUrl;
public $dataShort;
/**
* @var OC\Files\View
* @var \OC\Files\View
*/
public $view;
public $legacyEncryptedData;
@@ -34,16 +34,16 @@ class Test_Encryption_Crypt extends \OCA\Files_Encryption\Tests\TestCase {
parent::setUpBeforeClass();

// create test user
self::loginHelper(\Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1, true);
self::loginHelper(self::TEST_ENCRYPTION_CRYPT_USER1, true);
}

protected function setUp() {
parent::setUp();

// set user id
self::loginHelper(\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;
self::loginHelper(self::TEST_ENCRYPTION_CRYPT_USER1);
$this->userId = self::TEST_ENCRYPTION_CRYPT_USER1;
$this->pass = self::TEST_ENCRYPTION_CRYPT_USER1;

// set content for encrypting / decrypting in tests
$this->dataLong = file_get_contents(__DIR__ . '/../lib/crypt.php');
@@ -52,16 +52,16 @@ class Test_Encryption_Crypt extends \OCA\Files_Encryption\Tests\TestCase {
$this->legacyData = __DIR__ . '/legacy-text.txt';
$this->legacyEncryptedData = __DIR__ . '/legacy-encrypted-text.txt';
$this->legacyEncryptedDataKey = __DIR__ . '/encryption.key';
$this->randomKey = Encryption\Crypt::generateKey();
$this->randomKey = \OCA\Files_Encryption\Crypt::generateKey();

$keypair = Encryption\Crypt::createKeypair();
$keypair = \OCA\Files_Encryption\Crypt::createKeypair();
$this->genPublicKey = $keypair['publicKey'];
$this->genPrivateKey = $keypair['privateKey'];

$this->view = new \OC\Files\View('/');

// 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');
@@ -70,9 +70,9 @@ class Test_Encryption_Crypt extends \OCA\Files_Encryption\Tests\TestCase {
protected function tearDown() {
// reset app files_trashbin
if ($this->stateFilesTrashbin) {
OC_App::enable('files_trashbin');
\OC_App::enable('files_trashbin');
} else {
OC_App::disable('files_trashbin');
\OC_App::disable('files_trashbin');
}

$this->assertTrue(\OC_FileProxy::$enabled);
@@ -83,7 +83,7 @@ class Test_Encryption_Crypt extends \OCA\Files_Encryption\Tests\TestCase {

public static function tearDownAfterClass() {
// cleanup test user
\OC_User::deleteUser(\Test_Encryption_Crypt::TEST_ENCRYPTION_CRYPT_USER1);
\OC_User::deleteUser(self::TEST_ENCRYPTION_CRYPT_USER1);

parent::tearDownAfterClass();
}
@@ -95,7 +95,7 @@ class Test_Encryption_Crypt extends \OCA\Files_Encryption\Tests\TestCase {

# TODO: use more accurate (larger) string length for test confirmation

$key = Encryption\Crypt::generateKey();
$key = \OCA\Files_Encryption\Crypt::generateKey();

$this->assertTrue(strlen($key) > 16);

@@ -104,16 +104,16 @@ class Test_Encryption_Crypt extends \OCA\Files_Encryption\Tests\TestCase {
public function testDecryptPrivateKey() {

// test successful decrypt
$crypted = Encryption\Crypt::symmetricEncryptFileContent($this->genPrivateKey, 'hat');
$crypted = \OCA\Files_Encryption\Crypt::symmetricEncryptFileContent($this->genPrivateKey, 'hat');

$header = Encryption\Crypt::generateHeader();
$header = \OCA\Files_Encryption\Crypt::generateHeader();

$decrypted = Encryption\Crypt::decryptPrivateKey($header . $crypted, 'hat');
$decrypted = \OCA\Files_Encryption\Crypt::decryptPrivateKey($header . $crypted, 'hat');

$this->assertEquals($this->genPrivateKey, $decrypted);

//test private key decrypt with wrong password
$wrongPasswd = Encryption\Crypt::decryptPrivateKey($crypted, 'hat2');
$wrongPasswd = \OCA\Files_Encryption\Crypt::decryptPrivateKey($crypted, 'hat2');

$this->assertEquals(false, $wrongPasswd);

@@ -127,12 +127,12 @@ class Test_Encryption_Crypt extends \OCA\Files_Encryption\Tests\TestCase {

# TODO: search in keyfile for actual content as IV will ensure this test always passes

$crypted = Encryption\Crypt::symmetricEncryptFileContent($this->dataShort, 'hat');
$crypted = \OCA\Files_Encryption\Crypt::symmetricEncryptFileContent($this->dataShort, 'hat');

$this->assertNotEquals($this->dataShort, $crypted);


$decrypt = Encryption\Crypt::symmetricDecryptFileContent($crypted, 'hat');
$decrypt = \OCA\Files_Encryption\Crypt::symmetricDecryptFileContent($crypted, 'hat');

$this->assertEquals($this->dataShort, $decrypt);

@@ -145,12 +145,12 @@ class Test_Encryption_Crypt extends \OCA\Files_Encryption\Tests\TestCase {

# TODO: search in keyfile for actual content as IV will ensure this test always passes

$crypted = Encryption\Crypt::symmetricEncryptFileContent($this->dataShort, 'hat', 'AES-128-CFB');
$crypted = \OCA\Files_Encryption\Crypt::symmetricEncryptFileContent($this->dataShort, 'hat', 'AES-128-CFB');

$this->assertNotEquals($this->dataShort, $crypted);


$decrypt = Encryption\Crypt::symmetricDecryptFileContent($crypted, 'hat', 'AES-128-CFB');
$decrypt = \OCA\Files_Encryption\Crypt::symmetricDecryptFileContent($crypted, 'hat', 'AES-128-CFB');

$this->assertEquals($this->dataShort, $decrypt);

@@ -348,7 +348,7 @@ class Test_Encryption_Crypt extends \OCA\Files_Encryption\Tests\TestCase {

// remove the header to check if we can also decrypt old files without a header,
// this files should fall back to AES-128
$cryptedWithoutHeader = substr($retreivedCryptedFile, Encryption\Crypt::BLOCKSIZE);
$cryptedWithoutHeader = substr($retreivedCryptedFile, \OCA\Files_Encryption\Crypt::BLOCKSIZE);
$this->view->file_put_contents($this->userId . '/files/' . $filename, $cryptedWithoutHeader);

// Re-enable proxy - our work is done
@@ -367,13 +367,13 @@ class Test_Encryption_Crypt extends \OCA\Files_Encryption\Tests\TestCase {
*/
public function testIsEncryptedContent() {

$this->assertFalse(Encryption\Crypt::isCatfileContent($this->dataUrl));
$this->assertFalse(\OCA\Files_Encryption\Crypt::isCatfileContent($this->dataUrl));

$this->assertFalse(Encryption\Crypt::isCatfileContent($this->legacyEncryptedData));
$this->assertFalse(\OCA\Files_Encryption\Crypt::isCatfileContent($this->legacyEncryptedData));

$keyfileContent = Encryption\Crypt::symmetricEncryptFileContent($this->dataUrl, 'hat', 'AES-128-CFB');
$keyfileContent = \OCA\Files_Encryption\Crypt::symmetricEncryptFileContent($this->dataUrl, 'hat', 'AES-128-CFB');

$this->assertTrue(Encryption\Crypt::isCatfileContent($keyfileContent));
$this->assertTrue(\OCA\Files_Encryption\Crypt::isCatfileContent($keyfileContent));

}

@@ -384,7 +384,7 @@ class Test_Encryption_Crypt extends \OCA\Files_Encryption\Tests\TestCase {

# TODO: search in keyfile for actual content as IV will ensure this test always passes

$pair1 = Encryption\Crypt::createKeypair();
$pair1 = \OCA\Files_Encryption\Crypt::createKeypair();

$this->assertEquals(2, count($pair1));

@@ -393,12 +393,12 @@ class Test_Encryption_Crypt extends \OCA\Files_Encryption\Tests\TestCase {
$this->assertTrue(strlen($pair1['privateKey']) > 1);


$crypted = Encryption\Crypt::multiKeyEncrypt($this->dataShort, array($pair1['publicKey']));
$crypted = \OCA\Files_Encryption\Crypt::multiKeyEncrypt($this->dataShort, array($pair1['publicKey']));

$this->assertNotEquals($this->dataShort, $crypted['data']);


$decrypt = Encryption\Crypt::multiKeyDecrypt($crypted['data'], $crypted['keys'][0], $pair1['privateKey']);
$decrypt = \OCA\Files_Encryption\Crypt::multiKeyDecrypt($crypted['data'], $crypted['keys'][0], $pair1['privateKey']);

$this->assertEquals($this->dataShort, $decrypt);

@@ -529,7 +529,7 @@ class Test_Encryption_Crypt extends \OCA\Files_Encryption\Tests\TestCase {
// relogin
$params['uid'] = $this->userId;
$params['password'] = 'test';
OCA\Encryption\Hooks::login($params);
\OCA\Files_Encryption\Hooks::login($params);

// Get file decrypted contents
$newDecrypt = file_get_contents('crypt:///' . $this->userId . '/files/' . $filename);

+ 25
- 25
apps/files_encryption/tests/helper.php Bestand weergeven

@@ -6,35 +6,35 @@
* See the COPYING-README file.
*/

use OCA\Encryption;
namespace OCA\Files_Encryption\Tests;

/**
* Class Test_Encryption_Helper
* Class Helper
*/
class Test_Encryption_Helper extends \OCA\Files_Encryption\Tests\TestCase {
class Helper extends TestCase {

const TEST_ENCRYPTION_HELPER_USER1 = "test-helper-user1";
const TEST_ENCRYPTION_HELPER_USER2 = "test-helper-user2";

protected function setUpUsers() {
// create test user
self::loginHelper(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER2, true);
self::loginHelper(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER1, true);
self::loginHelper(self::TEST_ENCRYPTION_HELPER_USER2, true);
self::loginHelper(self::TEST_ENCRYPTION_HELPER_USER1, true);
}

protected function cleanUpUsers() {
// cleanup test user
\OC_User::deleteUser(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER1);
\OC_User::deleteUser(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER2);
\OC_User::deleteUser(self::TEST_ENCRYPTION_HELPER_USER1);
\OC_User::deleteUser(self::TEST_ENCRYPTION_HELPER_USER2);
}

public static function setupHooks() {
// Filesystem related hooks
\OCA\Encryption\Helper::registerFilesystemHooks();
\OCA\Files_Encryption\Helper::registerFilesystemHooks();

// clear and register hooks
\OC_FileProxy::clearProxies();
\OC_FileProxy::register(new OCA\Encryption\Proxy());
\OC_FileProxy::register(new \OCA\Files_Encryption\Proxy());
}

public static function tearDownAfterClass() {
@@ -49,13 +49,13 @@ class Test_Encryption_Helper extends \OCA\Files_Encryption\Tests\TestCase {
$partFilename = 'testfile.txt.part';
$filename = 'testfile.txt';

$this->assertTrue(Encryption\Helper::isPartialFilePath($partFilename));
$this->assertTrue(\OCA\Files_Encryption\Helper::isPartialFilePath($partFilename));

$this->assertEquals('testfile.txt', Encryption\Helper::stripPartialFileExtension($partFilename));
$this->assertEquals('testfile.txt', \OCA\Files_Encryption\Helper::stripPartialFileExtension($partFilename));

$this->assertFalse(Encryption\Helper::isPartialFilePath($filename));
$this->assertFalse(\OCA\Files_Encryption\Helper::isPartialFilePath($filename));

$this->assertEquals('testfile.txt', Encryption\Helper::stripPartialFileExtension($filename));
$this->assertEquals('testfile.txt', \OCA\Files_Encryption\Helper::stripPartialFileExtension($filename));
}


@@ -67,13 +67,13 @@ class Test_Encryption_Helper extends \OCA\Files_Encryption\Tests\TestCase {
$partFilename = 'testfile.txt.ocTransferId643653835.part';
$filename = 'testfile.txt';

$this->assertTrue(Encryption\Helper::isPartialFilePath($partFilename));
$this->assertTrue(\OCA\Files_Encryption\Helper::isPartialFilePath($partFilename));

$this->assertEquals('testfile.txt', Encryption\Helper::stripPartialFileExtension($partFilename));
$this->assertEquals('testfile.txt', \OCA\Files_Encryption\Helper::stripPartialFileExtension($partFilename));

$this->assertFalse(Encryption\Helper::isPartialFilePath($filename));
$this->assertFalse(\OCA\Files_Encryption\Helper::isPartialFilePath($filename));

$this->assertEquals('testfile.txt', Encryption\Helper::stripPartialFileExtension($filename));
$this->assertEquals('testfile.txt', \OCA\Files_Encryption\Helper::stripPartialFileExtension($filename));
}

function testGetPathToRealFile() {
@@ -85,8 +85,8 @@ class Test_Encryption_Helper extends \OCA\Files_Encryption\Tests\TestCase {
$versionPath = "/user/files_versions/foo/bar/test.txt.v456756835";
$cachePath = "/user/cache/transferid636483/foo/bar/test.txt";

$this->assertEquals($relativePath, Encryption\Helper::getPathToRealFile($versionPath));
$this->assertEquals($relativePath, Encryption\Helper::getPathToRealFile($cachePath));
$this->assertEquals($relativePath, \OCA\Files_Encryption\Helper::getPathToRealFile($versionPath));
$this->assertEquals($relativePath, \OCA\Files_Encryption\Helper::getPathToRealFile($cachePath));
}

function testGetUser() {
@@ -100,20 +100,20 @@ class Test_Encryption_Helper extends \OCA\Files_Encryption\Tests\TestCase {
self::loginHelper(self::TEST_ENCRYPTION_HELPER_USER1);

// if we are logged-in every path should return the currently logged-in user
$this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, Encryption\Helper::getUser($path3));
$this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, \OCA\Files_Encryption\Helper::getUser($path3));

// now log out
self::logoutHelper();

// now we should only get the user from /user/files and user/cache paths
$this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, Encryption\Helper::getUser($path1));
$this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, Encryption\Helper::getUser($path2));
$this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, \OCA\Files_Encryption\Helper::getUser($path1));
$this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, \OCA\Files_Encryption\Helper::getUser($path2));

$this->assertFalse(Encryption\Helper::getUser($path3));
$this->assertFalse(Encryption\Helper::getUser($path4));
$this->assertFalse(\OCA\Files_Encryption\Helper::getUser($path3));
$this->assertFalse(\OCA\Files_Encryption\Helper::getUser($path4));

// Log-in again
self::loginHelper(\Test_Encryption_Helper::TEST_ENCRYPTION_HELPER_USER1);
self::loginHelper(self::TEST_ENCRYPTION_HELPER_USER1);
self::cleanUpUsers();
}


+ 47
- 47
apps/files_encryption/tests/hooks.php Bestand weergeven

@@ -20,13 +20,13 @@
*
*/

use OCA\Encryption;
namespace OCA\Files_Encryption\Tests;

/**
* Class Test_Encryption_Hooks
* Class Hooks
* this class provide basic hook app tests
*/
class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
class Hooks extends TestCase {

const TEST_ENCRYPTION_HOOKS_USER1 = "test-encryption-hooks-user1.dot";
const TEST_ENCRYPTION_HOOKS_USER2 = "test-encryption-hooks-user2.dot";
@@ -64,20 +64,20 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
);

// create test user
self::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1, true);
self::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2, true);
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(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
\OC_User::setUserId(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
self::loginHelper(self::TEST_ENCRYPTION_HOOKS_USER1);
\OC_User::setUserId(self::TEST_ENCRYPTION_HOOKS_USER1);

// init filesystem view
$this->user1View = new \OC\Files\View('/'. \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1 . '/files');
$this->user2View = new \OC\Files\View('/'. \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '/files');
$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
@@ -89,8 +89,8 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {

public static function tearDownAfterClass() {
// cleanup test user
\OC_User::deleteUser(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
\OC_User::deleteUser(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2);
\OC_User::deleteUser(self::TEST_ENCRYPTION_HOOKS_USER1);
\OC_User::deleteUser(self::TEST_ENCRYPTION_HOOKS_USER2);

parent::tearDownAfterClass();
}
@@ -104,7 +104,7 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
$this->assertTrue(is_array($row));

// disabling the app should delete all user specific settings
\OCA\Encryption\Hooks::preDisable(array('app' => 'files_encryption'));
\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` = ?');
@@ -121,7 +121,7 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
function testDeleteHooks() {

// remember files_trashbin state
$stateFilesTrashbin = OC_App::isEnabled('files_trashbin');
$stateFilesTrashbin = \OC_App::isEnabled('files_trashbin');

// we want to tests with app files_trashbin disabled
\OC_App::disable('files_trashbin');
@@ -134,14 +134,14 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
// check if all keys are generated
$this->assertTrue($this->rootView->file_exists(
self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
. $this->filename . '/' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
. $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(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2);
\OC_User::setUserId(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2);
self::loginHelper(self::TEST_ENCRYPTION_HOOKS_USER2);
\OC_User::setUserId(self::TEST_ENCRYPTION_HOOKS_USER2);


$this->user2View->file_put_contents($this->filename, $this->data);
@@ -149,7 +149,7 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
// check if all keys are generated
$this->assertTrue($this->rootView->file_exists(
self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/'
. $this->filename . '/' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
. $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'));

@@ -164,7 +164,7 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
// all keys should still exist
$this->assertTrue($this->rootView->file_exists(
self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/'
. $this->filename . '/' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
. $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'));

@@ -176,33 +176,33 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
// check if keys from user2 are really deleted
$this->assertFalse($this->rootView->file_exists(
self::TEST_ENCRYPTION_HOOKS_USER2 . '/files_encryption/keys/'
. $this->filename . '/' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
. $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 . '/' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
. $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');
\OC_App::enable('files_trashbin');
}
else {
OC_App::disable('files_trashbin');
\OC_App::disable('files_trashbin');
}
}

function testDeleteHooksForSharedFiles() {

self::logoutHelper();
self::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
\OC_User::setUserId(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
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');
$stateFilesTrashbin = \OC_App::isEnabled('files_trashbin');

// we want to tests with app files_trashbin disabled
\OC_App::disable('files_trashbin');
@@ -215,7 +215,7 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
// check if all keys are generated
$this->assertTrue($this->rootView->file_exists(
self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
. $this->filename . '/' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
. $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'));

@@ -231,11 +231,11 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
// check if new share key exists
$this->assertTrue($this->rootView->file_exists(
self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
. $this->filename . '/' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
. $this->filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));

self::logoutHelper();
self::loginHelper(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2);
\OC_User::setUserId(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2);
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);
@@ -243,7 +243,7 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
// 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 . '/' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
. $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'));

@@ -255,24 +255,24 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
// 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 . '/' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
. $this->filename . '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
$this->assertFalse($this->rootView->file_exists(
self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keys/'
. $this->filename . '/' . \Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER2 . '.shareKey'));
. $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(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
\OC_User::setUserId(\Test_Encryption_Hooks::TEST_ENCRYPTION_HOOKS_USER1);
self::loginHelper(self::TEST_ENCRYPTION_HOOKS_USER1);
\OC_User::setUserId(self::TEST_ENCRYPTION_HOOKS_USER1);

if ($stateFilesTrashbin) {
OC_App::enable('files_trashbin');
\OC_App::enable('files_trashbin');
}
else {
OC_App::disable('files_trashbin');
\OC_App::disable('files_trashbin');
}
}

@@ -407,35 +407,35 @@ class Test_Encryption_Hooks extends \OCA\Files_Encryption\Tests\TestCase {
$view = new \OC\Files\View();

// set user password for the first time
\OCA\Encryption\Hooks::postCreateUser(array('uid' => 'newUser', 'password' => 'newUserPassword'));
\OCA\Files_Encryption\Hooks::postCreateUser(array('uid' => 'newUser', 'password' => 'newUserPassword'));

$this->assertTrue($view->file_exists(\OCA\Encryption\Keymanager::getPublicKeyPath() . '/newUser.publicKey'));
$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\Encryption\Keymanager::getPrivateKey($view, 'newUser');
$privateKey = \OCA\Encryption\Crypt::decryptPrivateKey($encryptedKey, 'newUserPassword');
$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\Encryption\Hooks::setPassphrase(array('uid' => 'newUser', 'password' => 'passwordChanged'));
\OCA\Files_Encryption\Hooks::setPassphrase(array('uid' => 'newUser', 'password' => 'passwordChanged'));

$encryptedKey = \OCA\Encryption\Keymanager::getPrivateKey($view, 'newUser');
$privateKey = \OCA\Encryption\Crypt::decryptPrivateKey($encryptedKey, '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\Encryption\Hooks::setPassphrase(array('uid' => 'newUser', 'password' => 'passwordChanged2'));
\OCA\Files_Encryption\Hooks::setPassphrase(array('uid' => 'newUser', 'password' => 'passwordChanged2'));

$encryptedKey = \OCA\Encryption\Keymanager::getPrivateKey($view, 'newUser');
$privateKey = \OCA\Encryption\Crypt::decryptPrivateKey($encryptedKey, 'passwordChanged2');
$encryptedKey = \OCA\Files_Encryption\Keymanager::getPrivateKey($view, 'newUser');
$privateKey = \OCA\Files_Encryption\Crypt::decryptPrivateKey($encryptedKey, 'passwordChanged2');
$this->assertFalse($privateKey);

$privateKey = \OCA\Encryption\Crypt::decryptPrivateKey($encryptedKey, 'passwordChanged');
$privateKey = \OCA\Files_Encryption\Crypt::decryptPrivateKey($encryptedKey, 'passwordChanged');
$this->assertTrue(is_string($privateKey));

}

+ 92
- 92
apps/files_encryption/tests/keymanager.php Bestand weergeven

@@ -6,12 +6,12 @@
* See the COPYING-README file.
*/

use OCA\Encryption;
namespace OCA\Files_Encryption\Tests;

/**
* Class Test_Encryption_Keymanager
* Class Keymanager
*/
class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {
class Keymanager extends TestCase {

const TEST_USER = "test-keymanager-user.dot";

@@ -19,7 +19,7 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {
public $pass;
public static $stateFilesTrashbin;
/**
* @var OC\Files\View
* @var \OC\Files\View
*/
public $view;
public $randomKey;
@@ -32,14 +32,14 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {
\OC_FileProxy::$enabled = false;

// remember files_trashbin state
self::$stateFilesTrashbin = OC_App::isEnabled('files_trashbin');
self::$stateFilesTrashbin = \OC_App::isEnabled('files_trashbin');

// we don't want to tests with app files_trashbin enabled
\OC_App::disable('files_trashbin');

// create test user
\OC_User::deleteUser(\Test_Encryption_Keymanager::TEST_USER);
parent::loginHelper(\Test_Encryption_Keymanager::TEST_USER, true);
\OC_User::deleteUser(self::TEST_USER);
parent::loginHelper(self::TEST_USER, true);
}

protected function setUp() {
@@ -50,24 +50,24 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {
$this->dataUrl = __DIR__ . '/../lib/crypt.php';
$this->legacyData = __DIR__ . '/legacy-text.txt';
$this->legacyEncryptedData = __DIR__ . '/legacy-encrypted-text.txt';
$this->randomKey = Encryption\Crypt::generateKey();
$this->randomKey = \OCA\Files_Encryption\Crypt::generateKey();

$keypair = Encryption\Crypt::createKeypair();
$keypair = \OCA\Files_Encryption\Crypt::createKeypair();
$this->genPublicKey = $keypair['publicKey'];
$this->genPrivateKey = $keypair['privateKey'];

$this->view = new \OC\Files\View('/');

self::loginHelper(Test_Encryption_Keymanager::TEST_USER);
$this->userId = \Test_Encryption_Keymanager::TEST_USER;
$this->pass = \Test_Encryption_Keymanager::TEST_USER;
self::loginHelper(self::TEST_USER);
$this->userId = self::TEST_USER;
$this->pass = self::TEST_USER;

$userHome = \OC_User::getHome($this->userId);
$this->dataDir = str_replace('/' . $this->userId, '', $userHome);
}

function tearDown() {
$this->view->deleteAll('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys');
$this->view->deleteAll('/' . self::TEST_USER . '/files_encryption/keys');
parent::tearDown();
}

@@ -75,10 +75,10 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {
\OC_FileProxy::$enabled = true;

// cleanup test user
\OC_User::deleteUser(\Test_Encryption_Keymanager::TEST_USER);
\OC_User::deleteUser(self::TEST_USER);
// reset app files_trashbin
if (self::$stateFilesTrashbin) {
OC_App::enable('files_trashbin');
\OC_App::enable('files_trashbin');
}

parent::tearDownAfterClass();
@@ -89,9 +89,9 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {
*/
function testGetPrivateKey() {

$key = Encryption\Keymanager::getPrivateKey($this->view, $this->userId);
$key = \OCA\Files_Encryption\Keymanager::getPrivateKey($this->view, $this->userId);

$privateKey = Encryption\Crypt::decryptPrivateKey($key, $this->pass);
$privateKey = \OCA\Files_Encryption\Crypt::decryptPrivateKey($key, $this->pass);

$res = openssl_pkey_get_private($privateKey);

@@ -108,7 +108,7 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {
*/
function testGetPublicKey() {

$publiceKey = Encryption\Keymanager::getPublicKey($this->view, $this->userId);
$publiceKey = \OCA\Files_Encryption\Keymanager::getPublicKey($this->view, $this->userId);

$res = openssl_pkey_get_public($publiceKey);

@@ -128,7 +128,7 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {

$file = 'unittest-' . $this->getUniqueID() . '.txt';

$util = new Encryption\Util($this->view, $this->userId);
$util = new \OCA\Files_Encryption\Util($this->view, $this->userId);

// Disable encryption proxy to prevent recursive calls
$proxyStatus = \OC_FileProxy::$enabled;
@@ -136,7 +136,7 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {

$this->view->file_put_contents($this->userId . '/files/' . $file, $this->dataShort);

Encryption\Keymanager::setFileKey($this->view, $util, $file, $key);
\OCA\Files_Encryption\Keymanager::setFileKey($this->view, $util, $file, $key);

$this->assertTrue($this->view->file_exists('/' . $this->userId . '/files_encryption/keys/' . $file . '/fileKey'));

@@ -154,7 +154,7 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {

$key = "dummy key";

Encryption\Keymanager::setPrivateKey($key, 'dummyUser');
\OCA\Files_Encryption\Keymanager::setPrivateKey($key, 'dummyUser');

$this->assertTrue($this->view->file_exists('/dummyUser/files_encryption/dummyUser.privateKey'));

@@ -169,13 +169,13 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {

$key = "dummy key";
$keyName = "myDummyKey";
$encHeader = Encryption\Crypt::generateHeader();
$encHeader = \OCA\Files_Encryption\Crypt::generateHeader();

Encryption\Keymanager::setPrivateSystemKey($key, $keyName);
\OCA\Files_Encryption\Keymanager::setPrivateSystemKey($key, $keyName);

$this->assertTrue($this->view->file_exists('/files_encryption/' . $keyName . '.privateKey'));

$result = Encryption\Keymanager::getPrivateSystemKey($keyName);
$result = \OCA\Files_Encryption\Keymanager::getPrivateSystemKey($keyName);

$this->assertSame($encHeader . $key, $result);

@@ -189,7 +189,7 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {
*/
function testGetUserKeys() {

$keys = Encryption\Keymanager::getUserKeys($this->view, $this->userId);
$keys = \OCA\Files_Encryption\Keymanager::getUserKeys($this->view, $this->userId);

$resPublic = openssl_pkey_get_public($keys['publicKey']);

@@ -199,7 +199,7 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {

$this->assertArrayHasKey('key', $sslInfoPublic);

$privateKey = Encryption\Crypt::decryptPrivateKey($keys['privateKey'], $this->pass);
$privateKey = \OCA\Files_Encryption\Crypt::decryptPrivateKey($keys['privateKey'], $this->pass);

$resPrivate = openssl_pkey_get_private($privateKey);

@@ -215,85 +215,85 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {
*/
function testRecursiveDelShareKeysFolder() {

$this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
$this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1/existingFile.txt', 'data');
$this->view->mkdir('/' . self::TEST_USER . '/files/folder1');
$this->view->file_put_contents('/' . self::TEST_USER . '/files/folder1/existingFile.txt', 'data');

// create folder structure for some dummy share key files
$this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1');
$this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/existingFile.txt');
$this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1');
$this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file2');
$this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/subfolder');
$this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/subfolder/file2');
$this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/subfolder/subsubfolder');
$this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/subfolder/subsubfolder/file1');
$this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/subfolder/subsubfolder/file2');
$this->view->mkdir('/' . self::TEST_USER . '/files_encryption/keys/folder1');
$this->view->mkdir('/' . self::TEST_USER . '/files_encryption/keys/folder1/existingFile.txt');
$this->view->mkdir('/' . self::TEST_USER . '/files_encryption/keys/folder1/file1');
$this->view->mkdir('/' . self::TEST_USER . '/files_encryption/keys/folder1/file2');
$this->view->mkdir('/' . self::TEST_USER . '/files_encryption/keys/folder1/subfolder');
$this->view->mkdir('/' . self::TEST_USER . '/files_encryption/keys/folder1/subfolder/file2');
$this->view->mkdir('/' . self::TEST_USER . '/files_encryption/keys/folder1/subfolder/subsubfolder');
$this->view->mkdir('/' . self::TEST_USER . '/files_encryption/keys/folder1/subfolder/subsubfolder/file1');
$this->view->mkdir('/' . self::TEST_USER . '/files_encryption/keys/folder1/subfolder/subsubfolder/file2');

// create some dummy share keys
$this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/existingFile.txt/user1.shareKey', 'data');
$this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/existingFile.txt/' . Test_Encryption_Keymanager::TEST_USER . '.shareKey', 'data');
$this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/user1.shareKey', 'data');
$this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/user1.test.shareKey', 'data');
$this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/test-keymanager-userxdot.shareKey', 'data');
$this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/userx.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey', 'data');
$this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/' . Test_Encryption_Keymanager::TEST_USER . '.userx.shareKey', 'data');
$this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/user1.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey', 'data');
$this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/' . Test_Encryption_Keymanager::TEST_USER . '.user1.shareKey', 'data');
$this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file2/user2.shareKey', 'data');
$this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file2/user3.shareKey', 'data');
$this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/subfolder/file2/user3.shareKey', 'data');
$this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/subfolder/subsubfolder/file1/user1.shareKey', 'data');
$this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/subfolder/subsubfolder/file2/user2.shareKey', 'data');
$this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/subfolder/subsubfolder/file2/user3.shareKey', 'data');
$this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/existingFile.txt/user1.shareKey', 'data');
$this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/existingFile.txt/' . self::TEST_USER . '.shareKey', 'data');
$this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/user1.shareKey', 'data');
$this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/user1.test.shareKey', 'data');
$this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/test-keymanager-userxdot.shareKey', 'data');
$this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/userx.' . self::TEST_USER . '.shareKey', 'data');
$this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/' . self::TEST_USER . '.userx.shareKey', 'data');
$this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/user1.' . self::TEST_USER . '.shareKey', 'data');
$this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/' . self::TEST_USER . '.user1.shareKey', 'data');
$this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/file2/user2.shareKey', 'data');
$this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/file2/user3.shareKey', 'data');
$this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/subfolder/file2/user3.shareKey', 'data');
$this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/subfolder/subsubfolder/file1/user1.shareKey', 'data');
$this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/subfolder/subsubfolder/file2/user2.shareKey', 'data');
$this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/keys/folder1/subfolder/subsubfolder/file2/user3.shareKey', 'data');

// recursive delete share keys from user1 and user2
Encryption\Keymanager::delShareKey($this->view,
array('user1', 'user2', Test_Encryption_Keymanager::TEST_USER),
Encryption\Keymanager::getKeyPath($this->view, new Encryption\Util($this->view, Test_Encryption_Keymanager::TEST_USER), '/folder1'),
Test_Encryption_Keymanager::TEST_USER,
\OCA\Files_Encryption\Keymanager::delShareKey($this->view,
array('user1', 'user2', self::TEST_USER),
\OCA\Files_Encryption\Keymanager::getKeyPath($this->view, new \OCA\Files_Encryption\Util($this->view, self::TEST_USER), '/folder1'),
self::TEST_USER,
'/folder1');

// check if share keys from user1 and user2 are deleted
$this->assertFalse($this->view->file_exists(
'/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/existingFile.txt/user1.shareKey'));
'/' . self::TEST_USER . '/files_encryption/keys/folder1/existingFile.txt/user1.shareKey'));
$this->assertFalse($this->view->file_exists(
'/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file1/user1.shareKey'));
'/' . self::TEST_USER . '/files_encryption/share-keys/folder1/file1/user1.shareKey'));
$this->assertFalse($this->view->file_exists(
'/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/file2/user2.shareKey'));
'/' . self::TEST_USER . '/files_encryption/share-keys/folder1/file2/user2.shareKey'));
$this->assertFalse($this->view->file_exists(
'/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder/file1/user1.shareKey'));
'/' . self::TEST_USER . '/files_encryption/share-keys/folder1/subfolder/subsubfolder/file1/user1.shareKey'));
$this->assertFalse($this->view->file_exists(
'/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/subfolder/subsubfolder/file2/user2.shareKey'));
'/' . self::TEST_USER . '/files_encryption/share-keys/folder1/subfolder/subsubfolder/file2/user2.shareKey'));

// check if share keys from user3 still exists
$this->assertTrue($this->view->file_exists(
'/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file2/user3.shareKey'));
'/' . self::TEST_USER . '/files_encryption/keys/folder1/file2/user3.shareKey'));
$this->assertTrue($this->view->file_exists(
'/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/subfolder/subsubfolder/file2/user3.shareKey'));
'/' . self::TEST_USER . '/files_encryption/keys/folder1/subfolder/subsubfolder/file2/user3.shareKey'));
$this->assertTrue($this->view->file_exists(
'/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/subfolder/file2/user3.shareKey'));
'/' . self::TEST_USER . '/files_encryption/keys/folder1/subfolder/file2/user3.shareKey'));

// check if share keys for user or file with similar name
$this->assertTrue($this->view->file_exists(
'/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/user1.test.shareKey'));
'/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/user1.test.shareKey'));
$this->assertTrue($this->view->file_exists(
'/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/test-keymanager-userxdot.shareKey'));
'/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/test-keymanager-userxdot.shareKey'));
$this->assertTrue($this->view->file_exists(
'/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/' . Test_Encryption_Keymanager::TEST_USER . '.userx.shareKey'));
'/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/' . self::TEST_USER . '.userx.shareKey'));
// FIXME: this case currently cannot be distinguished, needs further fixing
$this->assertTrue($this->view->file_exists(
'/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/userx.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey'));
'/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/userx.' . self::TEST_USER . '.shareKey'));
$this->assertTrue($this->view->file_exists(
'/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/user1.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey'));
'/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/user1.' . self::TEST_USER . '.shareKey'));
$this->assertTrue($this->view->file_exists(
'/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/file1/' . Test_Encryption_Keymanager::TEST_USER . '.user1.shareKey'));
'/' . self::TEST_USER . '/files_encryption/keys/folder1/file1/' . self::TEST_USER . '.user1.shareKey'));

// owner key from existing file should still exists because the file is still there
$this->assertTrue($this->view->file_exists(
'/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/keys/folder1/existingFile.txt/' . Test_Encryption_Keymanager::TEST_USER . '.shareKey'));
'/' . self::TEST_USER . '/files_encryption/keys/folder1/existingFile.txt/' . self::TEST_USER . '.shareKey'));

// cleanup
$this->view->deleteAll('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
$this->view->deleteAll('/' . self::TEST_USER . '/files/folder1');

}

@@ -302,44 +302,44 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {
*/
function testRecursiveDelShareKeysFile() {

$this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
$this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1/existingFile.txt', 'data');
$this->view->mkdir('/' . self::TEST_USER . '/files/folder1');
$this->view->file_put_contents('/' . self::TEST_USER . '/files/folder1/existingFile.txt', 'data');

// create folder structure for some dummy share key files
$this->view->mkdir('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1');
$this->view->mkdir('/' . self::TEST_USER . '/files_encryption/share-keys/folder1');

// create some dummy share keys
$this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.user1.shareKey', 'data');
$this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.user2.shareKey', 'data');
$this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.user3.shareKey', 'data');
$this->view->file_put_contents('/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey', 'data');
$this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/share-keys/folder1/existingFile.txt.user1.shareKey', 'data');
$this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/share-keys/folder1/existingFile.txt.user2.shareKey', 'data');
$this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/share-keys/folder1/existingFile.txt.user3.shareKey', 'data');
$this->view->file_put_contents('/' . self::TEST_USER . '/files_encryption/share-keys/folder1/existingFile.txt.' . self::TEST_USER . '.shareKey', 'data');

// recursive delete share keys from user1 and user2
Encryption\Keymanager::delShareKey($this->view,
array('user1', 'user2', Test_Encryption_Keymanager::TEST_USER),
Encryption\Keymanager::getKeyPath($this->view, new Encryption\Util($this->view, Test_Encryption_Keymanager::TEST_USER), '/folder1/existingFile.txt'),
Test_Encryption_Keymanager::TEST_USER,
\OCA\Files_Encryption\Keymanager::delShareKey($this->view,
array('user1', 'user2', self::TEST_USER),
\OCA\Files_Encryption\Keymanager::getKeyPath($this->view, new \OCA\Files_Encryption\Util($this->view, self::TEST_USER), '/folder1/existingFile.txt'),
self::TEST_USER,
'/folder1/existingFile.txt');


// check if share keys from user1 and user2 are deleted
$this->assertFalse($this->view->file_exists(
'/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.user1.shareKey'));
'/' . self::TEST_USER . '/files_encryption/share-keys/folder1/existingFile.user1.shareKey'));
$this->assertFalse($this->view->file_exists(
'/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.user2.shareKey'));
'/' . self::TEST_USER . '/files_encryption/share-keys/folder1/existingFile.user2.shareKey'));

// check if share keys for user3 and owner
$this->assertTrue($this->view->file_exists(
'/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.' . Test_Encryption_Keymanager::TEST_USER . '.shareKey'));
'/' . self::TEST_USER . '/files_encryption/share-keys/folder1/existingFile.txt.' . self::TEST_USER . '.shareKey'));
$this->assertTrue($this->view->file_exists(
'/'.Test_Encryption_Keymanager::TEST_USER.'/files_encryption/share-keys/folder1/existingFile.txt.user3.shareKey'));
'/' . self::TEST_USER . '/files_encryption/share-keys/folder1/existingFile.txt.user3.shareKey'));
// cleanup
$this->view->deleteAll('/'.Test_Encryption_Keymanager::TEST_USER.'/files/folder1');
$this->view->deleteAll('/' . self::TEST_USER . '/files/folder1');

}

function testKeySetPreperation() {
$basePath = '/'.Test_Encryption_Keymanager::TEST_USER.'/files';
$basePath = '/' . self::TEST_USER . '/files';
$path = '/folder1/subfolder/subsubfolder/file.txt';

$this->assertFalse($this->view->is_dir($basePath . '/testKeySetPreperation'));
@@ -356,9 +356,9 @@ class Test_Encryption_Keymanager extends \OCA\Files_Encryption\Tests\TestCase {
}

/**
* dummy class to access protected methods of \OCA\Encryption\Keymanager for testing
* dummy class to access protected methods of \OCA\Files_Encryption\Keymanager for testing
*/
class TestProtectedKeymanagerMethods extends \OCA\Encryption\Keymanager {
class TestProtectedKeymanagerMethods extends \OCA\Files_Encryption\Keymanager {

/**
* @param \OC\Files\View $view relative to data/
@@ -366,6 +366,6 @@ class TestProtectedKeymanagerMethods extends \OCA\Encryption\Keymanager {
* @param string $basePath
*/
public static function testKeySetPreperation($view, $path) {
return self::keySetPreparation($view, $path);
self::keySetPreparation($view, $path);
}
}

+ 12
- 12
apps/files_encryption/tests/migration.php Bestand weergeven

@@ -21,15 +21,15 @@
*
*/

use OCA\Encryption;
use OCA\Files_Encryption\Migration;
namespace OCA\Files_Encryption\Tests;

class Test_Migration extends \OCA\Files_Encryption\Tests\TestCase {
class Migration extends TestCase {

const TEST_ENCRYPTION_MIGRATION_USER1='test_encryption_user1';
const TEST_ENCRYPTION_MIGRATION_USER2='test_encryption_user2';
const TEST_ENCRYPTION_MIGRATION_USER3='test_encryption_user3';

/** @var \OC\Files\View */
private $view;
private $public_share_key_id;
private $recovery_key_id;
@@ -49,8 +49,8 @@ class Test_Migration extends \OCA\Files_Encryption\Tests\TestCase {
}

protected function tearDown() {
if (OC_DB::tableExists('encryption_test')) {
OC_DB::dropTable('encryption_test');
if (\OC_DB::tableExists('encryption_test')) {
\OC_DB::dropTable('encryption_test');
}
$this->assertTableNotExist('encryption_test');

@@ -60,10 +60,10 @@ class Test_Migration extends \OCA\Files_Encryption\Tests\TestCase {
public function setUp() {
$this->loginHelper(self::TEST_ENCRYPTION_MIGRATION_USER1);
$this->view = new \OC\Files\View();
$this->public_share_key_id = Encryption\Helper::getPublicShareKeyId();
$this->recovery_key_id = Encryption\Helper::getRecoveryKeyId();
if (OC_DB::tableExists('encryption_test')) {
OC_DB::dropTable('encryption_test');
$this->public_share_key_id = \OCA\Files_Encryption\Helper::getPublicShareKeyId();
$this->recovery_key_id = \OCA\Files_Encryption\Helper::getRecoveryKeyId();
if (\OC_DB::tableExists('encryption_test')) {
\OC_DB::dropTable('encryption_test');
}
$this->assertTableNotExist('encryption_test');
}
@@ -101,7 +101,7 @@ class Test_Migration extends \OCA\Files_Encryption\Tests\TestCase {

// create test table
$this->checkLastIndexId();
OC_DB::createDbFromStructure(__DIR__ . '/encryption_table.xml');
\OC_DB::createDbFromStructure(__DIR__ . '/encryption_table.xml');
$this->checkLastIndexId();
}

@@ -109,12 +109,12 @@ class Test_Migration extends \OCA\Files_Encryption\Tests\TestCase {
* @param string $table
*/
public function assertTableNotExist($table) {
$type=OC_Config::getValue( "dbtype", "sqlite" );
$type = \OC_Config::getValue( "dbtype", "sqlite" );
if( $type == 'sqlite' || $type == 'sqlite3' ) {
// sqlite removes the tables after closing the DB
$this->assertTrue(true);
} else {
$this->assertFalse(OC_DB::tableExists($table), 'Table ' . $table . ' exists.');
$this->assertFalse(\OC_DB::tableExists($table), 'Table ' . $table . ' exists.');
}
}


+ 17
- 17
apps/files_encryption/tests/proxy.php Bestand weergeven

@@ -20,13 +20,13 @@
*
*/

use OCA\Encryption;
namespace OCA\Files_Encryption\Tests;

/**
* Class Test_Encryption_Proxy
* Class Proxy
* this class provide basic proxy app tests
*/
class Test_Encryption_Proxy extends \OCA\Files_Encryption\Tests\TestCase {
class Proxy extends TestCase {

const TEST_ENCRYPTION_PROXY_USER1 = "test-proxy-user1";

@@ -45,20 +45,20 @@ class Test_Encryption_Proxy extends \OCA\Files_Encryption\Tests\TestCase {
parent::setUpBeforeClass();

// create test user
self::loginHelper(\Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1, true);
self::loginHelper(self::TEST_ENCRYPTION_PROXY_USER1, true);
}

protected function setUp() {
parent::setUp();

// set user id
\OC_User::setUserId(\Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1);
$this->userId = \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1;
$this->pass = \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1;
\OC_User::setUserId(self::TEST_ENCRYPTION_PROXY_USER1);
$this->userId = self::TEST_ENCRYPTION_PROXY_USER1;
$this->pass = self::TEST_ENCRYPTION_PROXY_USER1;

// init filesystem view
$this->view = new \OC\Files\View('/'. \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '/files');
$this->rootView = new \OC\Files\View('/'. \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 );
$this->view = new \OC\Files\View('/'. self::TEST_ENCRYPTION_PROXY_USER1 . '/files');
$this->rootView = new \OC\Files\View('/'. self::TEST_ENCRYPTION_PROXY_USER1 );

// init short data
$this->data = 'hats';
@@ -69,7 +69,7 @@ class Test_Encryption_Proxy extends \OCA\Files_Encryption\Tests\TestCase {

public static function tearDownAfterClass() {
// cleanup test user
\OC_User::deleteUser(\Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1);
\OC_User::deleteUser(self::TEST_ENCRYPTION_PROXY_USER1);

parent::tearDownAfterClass();
}
@@ -137,13 +137,13 @@ class Test_Encryption_Proxy extends \OCA\Files_Encryption\Tests\TestCase {

public function isExcludedPathProvider() {
return array(
array ('/' . \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '/files/test.txt', false),
array (\Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '/files/test.txt', false),
array ('/' . self::TEST_ENCRYPTION_PROXY_USER1 . '/files/test.txt', false),
array (self::TEST_ENCRYPTION_PROXY_USER1 . '/files/test.txt', false),
array ('/files/test.txt', true),
array ('/' . \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '/files/versions/test.txt', false),
array ('/' . \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '/files_versions/test.txt', false),
array ('/' . \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '/files_trashbin/test.txt', true),
array ('/' . \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '/file/test.txt', true),
array ('/' . self::TEST_ENCRYPTION_PROXY_USER1 . '/files/versions/test.txt', false),
array ('/' . self::TEST_ENCRYPTION_PROXY_USER1 . '/files_versions/test.txt', false),
array ('/' . self::TEST_ENCRYPTION_PROXY_USER1 . '/files_trashbin/test.txt', true),
array ('/' . self::TEST_ENCRYPTION_PROXY_USER1 . '/file/test.txt', true),
);
}

@@ -153,7 +153,7 @@ class Test_Encryption_Proxy extends \OCA\Files_Encryption\Tests\TestCase {
/**
* Dummy class to make protected methods available for testing
*/
class DummyProxy extends \OCA\Encryption\Proxy {
class DummyProxy extends \OCA\Files_Encryption\Proxy {
public function isExcludedPathTesting($path, $uid) {
return $this->isExcludedPath($path, $uid);
}

+ 242
- 242
apps/files_encryption/tests/share.php
Diff onderdrukt omdat het te groot bestand
Bestand weergeven


+ 12
- 12
apps/files_encryption/tests/stream.php Bestand weergeven

@@ -20,13 +20,13 @@
*
*/

use OCA\Encryption;
namespace OCA\Files_Encryption\Tests;

/**
* Class Test_Encryption_Stream
* Class Stream
* this class provide basic stream tests
*/
class Test_Encryption_Stream extends \OCA\Files_Encryption\Tests\TestCase {
class Stream extends TestCase {

const TEST_ENCRYPTION_STREAM_USER1 = "test-stream-user1";

@@ -43,16 +43,16 @@ class Test_Encryption_Stream extends \OCA\Files_Encryption\Tests\TestCase {
parent::setUpBeforeClass();

// create test user
self::loginHelper(\Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1, true);
self::loginHelper(self::TEST_ENCRYPTION_STREAM_USER1, true);
}

protected function setUp() {
parent::setUp();

// set user id
\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;
\OC_User::setUserId(self::TEST_ENCRYPTION_STREAM_USER1);
$this->userId = self::TEST_ENCRYPTION_STREAM_USER1;
$this->pass = self::TEST_ENCRYPTION_STREAM_USER1;

// init filesystem view
$this->view = new \OC\Files\View('/');
@@ -61,7 +61,7 @@ class Test_Encryption_Stream extends \OCA\Files_Encryption\Tests\TestCase {
$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');
@@ -70,10 +70,10 @@ class Test_Encryption_Stream extends \OCA\Files_Encryption\Tests\TestCase {
protected function tearDown() {
// reset app files_trashbin
if ($this->stateFilesTrashbin) {
OC_App::enable('files_trashbin');
\OC_App::enable('files_trashbin');
}
else {
OC_App::disable('files_trashbin');
\OC_App::disable('files_trashbin');
}

parent::tearDown();
@@ -81,7 +81,7 @@ class Test_Encryption_Stream extends \OCA\Files_Encryption\Tests\TestCase {

public static function tearDownAfterClass() {
// cleanup test user
\OC_User::deleteUser(\Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1);
\OC_User::deleteUser(self::TEST_ENCRYPTION_STREAM_USER1);

parent::tearDownAfterClass();
}
@@ -208,7 +208,7 @@ class Test_Encryption_Stream extends \OCA\Files_Encryption\Tests\TestCase {

file_put_contents($tmpFilename, $encryptedContent);

\OCA\Encryption\Helper::addTmpFileToMapper($tmpFilename, $filename);
\OCA\Files_Encryption\Helper::addTmpFileToMapper($tmpFilename, $filename);

// try to read the file from /tmp
$handle = fopen("crypt://".$tmpFilename, "r");

+ 6
- 8
apps/files_encryption/tests/testcase.php Bestand weergeven

@@ -8,10 +8,8 @@

namespace OCA\Files_Encryption\Tests;

use OCA\Encryption;

/**
* Class Test_Encryption_TestCase
* Class TestCase
*/
abstract class TestCase extends \Test\TestCase {

@@ -42,7 +40,7 @@ abstract class TestCase extends \Test\TestCase {
if ($loadEncryption) {
$params['uid'] = $user;
$params['password'] = $password;
\OCA\Encryption\Hooks::login($params);
\OCA\Files_Encryption\Hooks::login($params);
}
}

@@ -59,16 +57,16 @@ abstract class TestCase extends \Test\TestCase {
\OC_User::clearBackends();
\OC_User::useBackend('database');

\OCA\Encryption\Helper::registerFilesystemHooks();
\OCA\Encryption\Helper::registerUserHooks();
\OCA\Encryption\Helper::registerShareHooks();
\OCA\Files_Encryption\Helper::registerFilesystemHooks();
\OCA\Files_Encryption\Helper::registerUserHooks();
\OCA\Files_Encryption\Helper::registerShareHooks();

\OC::registerShareHooks();
\OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup');

// clear and register hooks
\OC_FileProxy::clearProxies();
\OC_FileProxy::register(new \OCA\Encryption\Proxy());
\OC_FileProxy::register(new \OCA\Files_Encryption\Proxy());
}

public static function tearDownAfterClass() {

+ 10
- 10
apps/files_encryption/tests/trashbin.php Bestand weergeven

@@ -20,13 +20,13 @@
*
*/

use OCA\Encryption;
namespace OCA\Files_Encryption\Tests;

/**
* Class Test_Encryption_Trashbin
* Class Trashbin
* this class provide basic trashbin app tests
*/
class Test_Encryption_Trashbin extends \OCA\Files_Encryption\Tests\TestCase {
class Trashbin extends TestCase {

const TEST_ENCRYPTION_TRASHBIN_USER1 = "test-trashbin-user1";

@@ -71,7 +71,7 @@ class Test_Encryption_Trashbin extends \OCA\Files_Encryption\Tests\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');
@@ -80,10 +80,10 @@ class Test_Encryption_Trashbin extends \OCA\Files_Encryption\Tests\TestCase {
protected function tearDown() {
// reset app files_trashbin
if ($this->stateFilesTrashbin) {
OC_App::enable('files_trashbin');
\OC_App::enable('files_trashbin');
}
else {
OC_App::disable('files_trashbin');
\OC_App::disable('files_trashbin');
}

parent::tearDown();
@@ -173,7 +173,7 @@ class Test_Encryption_Trashbin extends \OCA\Files_Encryption\Tests\TestCase {
// check if we found the file we created
$this->assertNotNull($trashFileSuffix);

$this->assertTrue($this->view->is_dir('/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keys/' . $filename . '.' . $trashFileSuffix));
$this->assertTrue($this->view->is_dir('/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keys/' . $filename . '.' . $trashFileSuffix));

// check if key for admin not exists
$this->assertTrue($this->view->file_exists(
@@ -219,10 +219,10 @@ class Test_Encryption_Trashbin extends \OCA\Files_Encryption\Tests\TestCase {

// before calling the restore operation the keys shouldn't be there
$this->assertFalse($this->view->file_exists(
'/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/' . $filename . '/fileKey'));
'/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/' . $filename . '/fileKey'));
$this->assertFalse($this->view->file_exists(
'/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/'
. $filename . '/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
'/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keys/'
. $filename . '/' . self::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));

// restore first file
$this->assertTrue(\OCA\Files_Trashbin\Trashbin::restore($filename . '.' . $trashFileSuffix, $filename, $timestamp));

+ 30
- 30
apps/files_encryption/tests/util.php Bestand weergeven

@@ -6,12 +6,12 @@
* See the COPYING-README file.
*/

use OCA\Encryption;
namespace OCA\Files_Encryption\Tests;

/**
* Class Test_Encryption_Util
* Class Util
*/
class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
class Util extends TestCase {

const TEST_ENCRYPTION_UTIL_USER1 = "test-util-user1";
const TEST_ENCRYPTION_UTIL_USER2 = "test-util-user2";
@@ -24,14 +24,14 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
public $publicKeyDir;
public $pass;
/**
* @var OC\Files\View
* @var \OC\Files\View
*/
public $view;
public $keyfilesPath;
public $publicKeyPath;
public $privateKeyPath;
/**
* @var \OCA\Encryption\Util
* @var \OCA\Files_Encryption\Util
*/
public $util;
public $dataShort;
@@ -74,12 +74,12 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
$this->legacyEncryptedDataKey = __DIR__ . '/encryption.key';
$this->legacyKey = "30943623843030686906\0\0\0\0";

$keypair = Encryption\Crypt::createKeypair();
$keypair = \OCA\Files_Encryption\Crypt::createKeypair();

$this->genPublicKey = $keypair['publicKey'];
$this->genPrivateKey = $keypair['privateKey'];

$this->publicKeyDir = \OCA\Encryption\Keymanager::getPublicKeyPath();
$this->publicKeyDir = \OCA\Files_Encryption\Keymanager::getPublicKeyPath();
$this->encryptionDir = '/' . $this->userId . '/' . 'files_encryption';
$this->keysPath = $this->encryptionDir . '/' . 'keys';
$this->publicKeyPath =
@@ -89,10 +89,10 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {

$this->view = new \OC\Files\View('/');

$this->util = new Encryption\Util($this->view, $this->userId);
$this->util = new \OCA\Files_Encryption\Util($this->view, $this->userId);

// 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');
@@ -101,10 +101,10 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
protected function tearDown() {
// reset app files_trashbin
if ($this->stateFilesTrashbin) {
OC_App::enable('files_trashbin');
\OC_App::enable('files_trashbin');
}
else {
OC_App::disable('files_trashbin');
\OC_App::disable('files_trashbin');
}

parent::tearDown();
@@ -128,7 +128,7 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
* test that paths set during User construction are correct
*/
function testKeyPaths() {
$util = new Encryption\Util($this->view, $this->userId);
$util = new \OCA\Files_Encryption\Util($this->view, $this->userId);

$this->assertEquals($this->publicKeyDir, $util->getPath('publicKeyDir'));
$this->assertEquals($this->encryptionDir, $util->getPath('encryptionDir'));
@@ -144,7 +144,7 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
*/
function testIsEncryptedPath() {

$util = new Encryption\Util($this->view, $this->userId);
$util = new \OCA\Files_Encryption\Util($this->view, $this->userId);

self::loginHelper($this->userId);

@@ -197,7 +197,7 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
//
// $params['uid'] = $this->userId;
// $params['password'] = $this->pass;
// $this->assertFalse(OCA\Encryption\Hooks::login($params));
// $this->assertFalse(OCA\Files_Encryption\Hooks::login($params));
//
// $this->view->unlink($this->privateKeyPath);
// }
@@ -207,7 +207,7 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
*/
function testRecoveryEnabledForUser() {

$util = new Encryption\Util($this->view, $this->userId);
$util = new \OCA\Files_Encryption\Util($this->view, $this->userId);

// Record the value so we can return it to it's original state later
$enabled = $util->recoveryEnabledForUser();
@@ -241,7 +241,7 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
// Re-enable proxy - our work is done
\OC_FileProxy::$enabled = $proxyStatus;

$util = new Encryption\Util($this->view, $this->userId);
$util = new \OCA\Files_Encryption\Util($this->view, $this->userId);

list($fileOwnerUid, $file) = $util->getUidAndFilename($filename);

@@ -283,7 +283,7 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
function testEncryptAll() {

$filename = "/encryptAll" . $this->getUniqueID() . ".txt";
$util = new Encryption\Util($this->view, $this->userId);
$util = new \OCA\Files_Encryption\Util($this->view, $this->userId);

// disable encryption to upload a unencrypted file
\OC_App::disable('files_encryption');
@@ -338,18 +338,18 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
$this->assertSame($encContent, $content);

// now we load the encryption app again
OC_App::loadApp('files_encryption');
\OC_App::loadApp('files_encryption');

// init encryption app
$params = array('uid' => \OCP\User::getUser(),
'password' => \OCP\User::getUser());

$view = new OC\Files\View('/');
$util = new \OCA\Encryption\Util($view, \OCP\User::getUser());
$view = new \OC\Files\View('/');
$util = new \OCA\Files_Encryption\Util($view, \OCP\User::getUser());

$result = $util->initEncryption($params);

$this->assertTrue($result instanceof \OCA\Encryption\Session);
$this->assertTrue($result instanceof \OCA\Files_Encryption\Session);

$successful = $util->decryptAll();

@@ -385,7 +385,7 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
// cleanup
$this->view->unlink($this->userId . '/files/' . $filename);
$this->view->deleteAll($backupPath);
OC_App::enable('files_encryption');
\OC_App::enable('files_encryption');

}

@@ -401,7 +401,7 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
$this->view->file_put_contents($encPath . '/keys/foo/fileKey', 'key');
$this->view->file_put_contents($encPath . '/keys/foo/user1.shareKey', 'share key');

$util = new \OCA\Encryption\Util($this->view, self::TEST_ENCRYPTION_UTIL_USER1);
$util = new \OCA\Files_Encryption\Util($this->view, self::TEST_ENCRYPTION_UTIL_USER1);

$util->backupAllKeys('testBackupAllKeys');

@@ -427,7 +427,7 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
$file1 = "/decryptAll1" . $this->getUniqueID() . ".txt";
$file2 = "/decryptAll2" . $this->getUniqueID() . ".txt";

$util = new Encryption\Util($this->view, $this->userId);
$util = new \OCA\Files_Encryption\Util($this->view, $this->userId);

$this->view->file_put_contents($this->userId . '/files/' . $file1, $this->dataShort);
$this->view->file_put_contents($this->userId . '/files/' . $file2, $this->dataShort);
@@ -551,13 +551,13 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
$publicShareKeyId,
$recoveryKeyId,
);
\Test_Encryption_Util::loginHelper('readyUser', true);
\Test_Encryption_Util::loginHelper('notReadyUser', true);
self::loginHelper('readyUser', true);
self::loginHelper('notReadyUser', true);
// delete encryption dir to make it not ready
$this->view->unlink('notReadyUser/files_encryption/');

// login as user1
\Test_Encryption_Util::loginHelper(\Test_Encryption_Util::TEST_ENCRYPTION_UTIL_USER1);
self::loginHelper(self::TEST_ENCRYPTION_UTIL_USER1);

$result = $this->util->filterShareReadyUsers($usersToTest);
$this->assertEquals(
@@ -598,7 +598,7 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
if ($loadEncryption) {
$params['uid'] = $user;
$params['password'] = $password;
OCA\Encryption\Hooks::login($params);
\OCA\Files_Encryption\Hooks::login($params);
}
}

@@ -625,9 +625,9 @@ class Test_Encryption_Util extends \OCA\Files_Encryption\Tests\TestCase {
}

/**
* dummy class extends \OCA\Encryption\Util to access protected methods for testing
* dummy class extends \OCA\Files_Encryption\Util to access protected methods for testing
*/
class DummyUtilClass extends \OCA\Encryption\Util {
class DummyUtilClass extends \OCA\Files_Encryption\Util {
public function testIsMountPointApplicableToUser($mount) {
return $this->isMountPointApplicableToUser($mount);
}

+ 19
- 19
apps/files_encryption/tests/webdav.php Bestand weergeven

@@ -20,14 +20,14 @@
*
*/

use OCA\Encryption;
namespace OCA\Files_Encryption\Tests;

/**
* Class Test_Encryption_Webdav
* Class Webdav
*
* this class provide basic webdav tests for PUT,GET and DELETE
*/
class Test_Encryption_Webdav extends \OCA\Files_Encryption\Tests\TestCase {
class Webdav extends TestCase {

const TEST_ENCRYPTION_WEBDAV_USER1 = "test-webdav-user1";

@@ -46,7 +46,7 @@ class Test_Encryption_Webdav extends \OCA\Files_Encryption\Tests\TestCase {
parent::setUpBeforeClass();

// create test user
self::loginHelper(\Test_Encryption_Webdav::TEST_ENCRYPTION_WEBDAV_USER1, true);
self::loginHelper(self::TEST_ENCRYPTION_WEBDAV_USER1, true);

}

@@ -57,9 +57,9 @@ class Test_Encryption_Webdav extends \OCA\Files_Encryption\Tests\TestCase {
\OC_User::useBackend('database');

// set user id
\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;
\OC_User::setUserId(self::TEST_ENCRYPTION_WEBDAV_USER1);
$this->userId = self::TEST_ENCRYPTION_WEBDAV_USER1;
$this->pass = self::TEST_ENCRYPTION_WEBDAV_USER1;

// init filesystem view
$this->view = new \OC\Files\View('/');
@@ -68,21 +68,21 @@ class Test_Encryption_Webdav extends \OCA\Files_Encryption\Tests\TestCase {
$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');

// create test user
self::loginHelper(\Test_Encryption_Webdav::TEST_ENCRYPTION_WEBDAV_USER1);
self::loginHelper(self::TEST_ENCRYPTION_WEBDAV_USER1);
}

protected function tearDown() {
// reset app files_trashbin
if ($this->stateFilesTrashbin) {
OC_App::enable('files_trashbin');
\OC_App::enable('files_trashbin');
} else {
OC_App::disable('files_trashbin');
\OC_App::disable('files_trashbin');
}

parent::tearDown();
@@ -90,7 +90,7 @@ class Test_Encryption_Webdav extends \OCA\Files_Encryption\Tests\TestCase {

public static function tearDownAfterClass() {
// cleanup test user
\OC_User::deleteUser(\Test_Encryption_Webdav::TEST_ENCRYPTION_WEBDAV_USER1);
\OC_User::deleteUser(self::TEST_ENCRYPTION_WEBDAV_USER1);

parent::tearDownAfterClass();
}
@@ -138,7 +138,7 @@ class Test_Encryption_Webdav extends \OCA\Files_Encryption\Tests\TestCase {
\OC_FileProxy::$enabled = $proxyStatus;

// check if encrypted content is valid
$this->assertTrue(Encryption\Crypt::isCatfileContent($encryptedContent));
$this->assertTrue(\OCA\Files_Encryption\Crypt::isCatfileContent($encryptedContent));

// get decrypted file contents
$decrypt = file_get_contents('crypt:///' . $this->userId . '/files' . $filename);
@@ -211,14 +211,14 @@ class Test_Encryption_Webdav extends \OCA\Files_Encryption\Tests\TestCase {
*/
function handleWebdavRequest($body = false) {
// Backends
$authBackend = new OC_Connector_Sabre_Auth();
$lockBackend = new OC_Connector_Sabre_Locks();
$requestBackend = new OC_Connector_Sabre_Request();
$authBackend = new \OC_Connector_Sabre_Auth();
$lockBackend = new \OC_Connector_Sabre_Locks();
$requestBackend = new \OC_Connector_Sabre_Request();

// Create ownCloud Dir
$root = '/' . $this->userId . '/files';
$view = new \OC\Files\View($root);
$publicDir = new OC_Connector_Sabre_Directory($view, $view->getFileInfo(''));
$publicDir = new \OC_Connector_Sabre_Directory($view, $view->getFileInfo(''));
$objectTree = new \OC\Connector\Sabre\ObjectTree();
$mountManager = \OC\Files\Filesystem::getMountManager();
$objectTree->init($publicDir, $view, $mountManager);
@@ -232,8 +232,8 @@ class Test_Encryption_Webdav extends \OCA\Files_Encryption\Tests\TestCase {
$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($view));
$server->addPlugin(new OC_Connector_Sabre_MaintenancePlugin());
$server->addPlugin(new \OC_Connector_Sabre_QuotaPlugin($view));
$server->addPlugin(new \OC_Connector_Sabre_MaintenancePlugin());
$server->debugExceptions = true;

// And off we go!

+ 2
- 2
apps/files_trashbin/lib/trashbin.php Bestand weergeven

@@ -274,7 +274,7 @@ class Trashbin {
return 0;
}

$util = new \OCA\Encryption\Util($rootView, $user);
$util = new \OCA\Files_Encryption\Util($rootView, $user);

$baseDir = '/files_encryption/';
if (!$util->isSystemWideMountPoint($ownerPath)) {
@@ -448,7 +448,7 @@ class Trashbin {
return false;
}

$util = new \OCA\Encryption\Util($rootView, $user);
$util = new \OCA\Files_Encryption\Util($rootView, $user);

$baseDir = '/files_encryption/';
if (!$util->isSystemWideMountPoint($ownerPath)) {

+ 2
- 2
lib/private/connector/sabre/file.php Bestand weergeven

@@ -104,7 +104,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements \Sabre\
} catch (\OCP\Files\LockNotAcquiredException $e) {
// the file is currently being written to by another process
throw new OC_Connector_Sabre_Exception_FileLocked($e->getMessage(), $e->getCode(), $e);
} catch (\OCA\Encryption\Exception\EncryptionException $e) {
} catch (\OCA\Files_Encryption\Exception\EncryptionException $e) {
throw new \Sabre\DAV\Exception\Forbidden($e->getMessage());
} catch (\OCP\Files\StorageNotAvailableException $e) {
throw new \Sabre\DAV\Exception\ServiceUnavailable($e->getMessage());
@@ -166,7 +166,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements \Sabre\
} else {
try {
return $this->fileView->fopen(ltrim($this->path, '/'), 'rb');
} catch (\OCA\Encryption\Exception\EncryptionException $e) {
} catch (\OCA\Files_Encryption\Exception\EncryptionException $e) {
throw new \Sabre\DAV\Exception\Forbidden($e->getMessage());
} catch (\OCP\Files\StorageNotAvailableException $e) {
throw new \Sabre\DAV\Exception\ServiceUnavailable($e->getMessage());

+ 1
- 1
settings/ajax/decryptall.php Bestand weergeven

@@ -11,7 +11,7 @@ $params = array('uid' => \OCP\User::getUser(),
'password' => $_POST['password']);

$view = new OC\Files\View('/');
$util = new \OCA\Encryption\Util($view, \OCP\User::getUser());
$util = new \OCA\Files_Encryption\Util($view, \OCP\User::getUser());
$l = \OC::$server->getL10N('settings');

$result = $util->initEncryption($params);

+ 1
- 1
settings/changepassword/controller.php Bestand weergeven

@@ -52,7 +52,7 @@ class Controller {

if (\OC_App::isEnabled('files_encryption')) {
//handle the recovery case
$util = new \OCA\Encryption\Util(new \OC\Files\View('/'), $username);
$util = new \OCA\Files_Encryption\Util(new \OC\Files\View('/'), $username);
$recoveryAdminEnabled = \OC_Appconfig::getValue('files_encryption', 'recoveryAdminEnabled');

$validRecoveryPassword = false;

Laden…
Annuleren
Opslaan