summaryrefslogtreecommitdiffstats
path: root/apps/encryption
diff options
context:
space:
mode:
authorBjoern Schiessle <bjoern@schiessle.org>2018-10-24 16:15:17 +0200
committerBjoern Schiessle <bjoern@schiessle.org>2018-10-24 16:53:39 +0200
commit87657fffd8aa3e7e8211b3c866b56042e78a922a (patch)
tree44f145d032ce3e5c0cb92c199834ccf138f08e16 /apps/encryption
parent37782b1084275d54474700e4ae7863b18e23dc04 (diff)
downloadnextcloud-server-87657fffd8aa3e7e8211b3c866b56042e78a922a.tar.gz
nextcloud-server-87657fffd8aa3e7e8211b3c866b56042e78a922a.zip
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.php6
-rw-r--r--apps/encryption/tests/Crypto/EncryptAllTest.php33
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],
+ ];
+ }
+
}