]> source.dussan.org Git - nextcloud-server.git/commitdiff
Check if the key exists, before trying to delete it
authorJoas Schilling <nickvergessen@owncloud.com>
Thu, 9 Apr 2015 08:28:02 +0000 (10:28 +0200)
committerJoas Schilling <nickvergessen@owncloud.com>
Thu, 9 Apr 2015 08:28:02 +0000 (10:28 +0200)
lib/private/encryption/keys/storage.php
lib/public/encryption/keys/istorage.php
tests/lib/encryption/keys/storage.php

index 40bd3056b1a1e07533468c8ffa84a85662387b07..9d978193130cb7773f20658f79319eeea3199d3a 100644 (file)
@@ -140,11 +140,11 @@ class Storage implements \OCP\Encryption\Keys\IStorage {
         * @param string $uid ID if the user for whom we want to delete the key
         * @param string $keyId id of the key
         *
-        * @return boolean
+        * @return boolean False when the key could not be deleted
         */
        public function deleteUserKey($uid, $keyId) {
                $path = $this->constructUserKeyPath($keyId, $uid);
-               return $this->view->unlink($path);
+               return !$this->view->file_exists($path) || $this->view->unlink($path);
        }
 
        /**
@@ -153,22 +153,23 @@ class Storage implements \OCP\Encryption\Keys\IStorage {
         * @param string $path path to file
         * @param string $keyId id of the key
         *
-        * @return boolean
+        * @return boolean False when the key could not be deleted
         */
        public function deleteFileKey($path, $keyId) {
                $keyDir = $this->getFileKeyDir($path);
-               return $this->view->unlink($keyDir . $keyId);
+               return !$this->view->file_exists($keyDir . $keyId) || $this->view->unlink($keyDir . $keyId);
        }
 
        /**
         * delete all file keys for a given file
         *
         * @param string $path to the file
-        * @return boolean
+        * @return boolean False when the key could not be deleted
         */
        public function deleteAllFileKeys($path) {
                $keyDir = $this->getFileKeyDir($path);
-               return $this->view->deleteAll(dirname($keyDir));
+               $path = dirname($keyDir);
+               return !$this->view->file_exists($path) || $this->view->deleteAll($path);
        }
 
        /**
@@ -177,11 +178,11 @@ class Storage implements \OCP\Encryption\Keys\IStorage {
         *
         * @param string $keyId id of the key
         *
-        * @return boolean
+        * @return boolean False when the key could not be deleted
         */
        public function deleteSystemUserKey($keyId) {
                $path = $this->constructUserKeyPath($keyId);
-               return $this->view->unlink($path);
+               return !$this->view->file_exists($path) || $this->view->unlink($path);
        }
 
 
index 898ab81c37309da9abc2cad3368b87831a64be50..c6933e7afab4e1940544e789827a9f8ce3bd65ea 100644 (file)
@@ -89,7 +89,7 @@ interface IStorage {
         * @param string $uid ID if the user for whom we want to delete the key
         * @param string $keyId id of the key
         *
-        * @return boolean
+        * @return boolean False when the key could not be deleted
         */
        public function deleteUserKey($uid, $keyId);
 
@@ -99,7 +99,7 @@ interface IStorage {
         * @param string $path path to file
         * @param string $keyId id of the key
         *
-        * @return boolean
+        * @return boolean False when the key could not be deleted
         */
        public function deleteFileKey($path, $keyId);
 
@@ -107,7 +107,7 @@ interface IStorage {
         * delete all file keys for a given file
         *
         * @param string $path to the file
-        * @return boolean
+        * @return boolean False when the keys could not be deleted
         */
        public function deleteAllFileKeys($path);
 
@@ -117,7 +117,7 @@ interface IStorage {
         *
         * @param string $keyId id of the key
         *
-        * @return boolean
+        * @return boolean False when the key could not be deleted
         */
        public function deleteSystemUserKey($keyId);
 
index 8ab46987f8c5796d2304e0886773dfec9c033aed..bcf1c0f7624b2a22ee1c4f9ba83226e96eebf7bd 100644 (file)
@@ -197,6 +197,10 @@ class StorageTest extends TestCase {
        }
 
        public function testDeleteUserKey() {
+               $this->view->expects($this->once())
+                       ->method('file_exists')
+                       ->with($this->equalTo('/user1/files_encryption/encModule/user1.publicKey'))
+                       ->willReturn(true);
                $this->view->expects($this->once())
                        ->method('unlink')
                        ->with($this->equalTo('/user1/files_encryption/encModule/user1.publicKey'))
@@ -208,6 +212,10 @@ class StorageTest extends TestCase {
        }
 
        public function testDeleteSystemUserKey() {
+               $this->view->expects($this->once())
+                       ->method('file_exists')
+                       ->with($this->equalTo('/files_encryption/encModule/shareKey_56884'))
+                       ->willReturn(true);
                $this->view->expects($this->once())
                        ->method('unlink')
                        ->with($this->equalTo('/files_encryption/encModule/shareKey_56884'))
@@ -228,6 +236,10 @@ class StorageTest extends TestCase {
                $this->util->expects($this->any())
                        ->method('isSystemWideMountPoint')
                        ->willReturn(true);
+               $this->view->expects($this->once())
+                       ->method('file_exists')
+                       ->with($this->equalTo('/files_encryption/keys/files/foo.txt/encModule/fileKey'))
+                       ->willReturn(true);
                $this->view->expects($this->once())
                        ->method('unlink')
                        ->with($this->equalTo('/files_encryption/keys/files/foo.txt/encModule/fileKey'))
@@ -248,6 +260,10 @@ class StorageTest extends TestCase {
                $this->util->expects($this->any())
                        ->method('isSystemWideMountPoint')
                        ->willReturn(false);
+               $this->view->expects($this->once())
+                       ->method('file_exists')
+                       ->with($this->equalTo('/user1/files_encryption/keys/files/foo.txt/encModule/fileKey'))
+                       ->willReturn(true);
                $this->view->expects($this->once())
                        ->method('unlink')
                        ->with($this->equalTo('/user1/files_encryption/keys/files/foo.txt/encModule/fileKey'))