diff options
author | Bjoern Schiessle <bjoern@schiessle.org> | 2018-10-24 17:15:17 +0300 |
---|---|---|
committer | Bjoern Schiessle <bjoern@schiessle.org> | 2018-10-24 17:53:39 +0300 |
commit | 87657fffd8aa3e7e8211b3c866b56042e78a922a (patch) | |
tree | 44f145d032ce3e5c0cb92c199834ccf138f08e16 /apps/encryption | |
parent | 37782b1084275d54474700e4ae7863b18e23dc04 (diff) |
skip already encrypted files on encrypt all command
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
Diffstat (limited to 'apps/encryption')
-rw-r--r-- | apps/encryption/lib/Crypto/EncryptAll.php | 6 | ||||
-rw-r--r-- | apps/encryption/tests/Crypto/EncryptAllTest.php | 33 |
2 files changed, 39 insertions, 0 deletions
diff --git a/apps/encryption/lib/Crypto/EncryptAll.php b/apps/encryption/lib/Crypto/EncryptAll.php index c2619dc8ef1..ee13fee9eef 100644 --- a/apps/encryption/lib/Crypto/EncryptAll.php +++ b/apps/encryption/lib/Crypto/EncryptAll.php @@ -295,6 +295,12 @@ class EncryptAll { */ protected function encryptFile($path) { + // skip already encrypted files + $fileInfo = $this->rootView->getFileInfo($path); + if ($fileInfo !== false && $fileInfo->isEncrypted()) { + return true; + } + $source = $path; $target = $path . '.encrypted.' . time(); diff --git a/apps/encryption/tests/Crypto/EncryptAllTest.php b/apps/encryption/tests/Crypto/EncryptAllTest.php index a39bf7befb6..647b951a0a6 100644 --- a/apps/encryption/tests/Crypto/EncryptAllTest.php +++ b/apps/encryption/tests/Crypto/EncryptAllTest.php @@ -33,6 +33,7 @@ use OCA\Encryption\Crypto\EncryptAll; use OCA\Encryption\KeyManager; use OCA\Encryption\Users\Setup; use OCA\Encryption\Util; +use OCP\Files\FileInfo; use OCP\IConfig; use OCP\IL10N; use OCP\IUserManager; @@ -354,4 +355,36 @@ class EncryptAllTest extends TestCase { $this->assertSame($password, $userPasswords['user1']); } + /** + * @dataProvider dataTestEncryptFile + * @param $isEncrypted + */ + public function testEncryptFile($isEncrypted) { + $fileInfo = $this->createMock(FileInfo::class); + $fileInfo->expects($this->any())->method('isEncrypted') + ->willReturn($isEncrypted); + $this->view->expects($this->any())->method('getFileInfo') + ->willReturn($fileInfo); + + + if($isEncrypted) { + $this->view->expects($this->never())->method('copy'); + $this->view->expects($this->never())->method('rename'); + } else { + $this->view->expects($this->once())->method('copy'); + $this->view->expects($this->once())->method('rename'); + } + + $this->assertTrue( + $this->invokePrivate($this->encryptAll, 'encryptFile', ['foo.txt']) + ); + } + + public function dataTestEncryptFile() { + return [ + [true], + [false], + ]; + } + } |