|
|
|
|
@ -311,4 +311,46 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
|
|
|
|
|
$this->rootView->unlink('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief replacing encryption keys during password change should be allowed
|
|
|
|
|
* until the user logged in for the first time
|
|
|
|
|
*/
|
|
|
|
|
public function testSetPassphrase() {
|
|
|
|
|
|
|
|
|
|
$view = new \OC\Files\View();
|
|
|
|
|
|
|
|
|
|
// set user password for the first time
|
|
|
|
|
\OCA\Encryption\Hooks::postCreateUser(array('uid' => 'newUser', 'password' => 'newUserPassword'));
|
|
|
|
|
|
|
|
|
|
$this->assertTrue($view->file_exists('public-keys/newUser.public.key'));
|
|
|
|
|
$this->assertTrue($view->file_exists('newUser/files_encryption/newUser.private.key'));
|
|
|
|
|
|
|
|
|
|
// check if we are able to decrypt the private key
|
|
|
|
|
$encryptedKey = \OCA\Encryption\Keymanager::getPrivateKey($view, 'newUser');
|
|
|
|
|
$privateKey = \OCA\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'));
|
|
|
|
|
|
|
|
|
|
$encryptedKey = \OCA\Encryption\Keymanager::getPrivateKey($view, 'newUser');
|
|
|
|
|
$privateKey = \OCA\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'));
|
|
|
|
|
|
|
|
|
|
$encryptedKey = \OCA\Encryption\Keymanager::getPrivateKey($view, 'newUser');
|
|
|
|
|
$privateKey = \OCA\Encryption\Crypt::decryptPrivateKey($encryptedKey, 'passwordChanged2');
|
|
|
|
|
$this->assertFalse($privateKey);
|
|
|
|
|
|
|
|
|
|
$privateKey = \OCA\Encryption\Crypt::decryptPrivateKey($encryptedKey, 'passwordChanged');
|
|
|
|
|
$this->assertTrue(is_string($privateKey));
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|