From 506222567e71fc0d77fa77ee7805c93fa7655b6c Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Fri, 20 Mar 2015 16:24:44 +0100 Subject: [PATCH] add deleteKey methods to key storage --- lib/private/encryption/keys/storage.php | 69 ++++++++++++++++++++++--- lib/public/encryption/keys/istorage.php | 1 + 2 files changed, 63 insertions(+), 7 deletions(-) diff --git a/lib/private/encryption/keys/storage.php b/lib/private/encryption/keys/storage.php index fba86e1737..8f1822ca49 100644 --- a/lib/private/encryption/keys/storage.php +++ b/lib/private/encryption/keys/storage.php @@ -67,8 +67,7 @@ class Storage implements \OCP\Encryption\Keys\IStorage { * @return mixed key */ public function getUserKey($uid, $keyId) { - $path = '/' . $uid . $this->encryption_base_dir . '/' - . $this->encryptionModuleId . '/' . $uid . '.' . $keyId; + $path = $this->constructUserKeyPath($keyId, $uid); return $this->getKey($path); } @@ -94,7 +93,7 @@ class Storage implements \OCP\Encryption\Keys\IStorage { * @return mixed key */ public function getSystemUserKey($keyId) { - $path = $this->encryption_base_dir . '/' . $this->encryptionModuleId . '/' . $keyId; + $path = $this->constructUserKeyPath($keyId); return $this->getKey($path); } @@ -106,8 +105,7 @@ class Storage implements \OCP\Encryption\Keys\IStorage { * @param mixed $key */ public function setUserKey($uid, $keyId, $key) { - $path = '/' . $uid . $this->encryption_base_dir . '/' - . $this->encryptionModuleId . '/' . $uid . '.' . $keyId; + $path = $this->constructUserKeyPath($keyId, $uid); return $this->setKey($path, $key); } @@ -133,11 +131,68 @@ class Storage implements \OCP\Encryption\Keys\IStorage { * @return mixed key */ public function setSystemUserKey($keyId, $key) { - $path = $this->encryption_base_dir . '/' - . $this->encryptionModuleId . '/' . $keyId; + $path = $this->constructUserKeyPath($keyId); return $this->setKey($path, $key); } + /** + * delete user specific key + * + * @param string $uid ID if the user for whom we want to delete the key + * @param string $keyId id of the key + * + * @return boolean + */ + public function deleteUserKey($uid, $keyId) { + $path = $this->constructUserKeyPath($keyId, $uid); + return $this->view->unlink($path); + } + + /** + * delete file specific key + * + * @param string $path path to file + * @param string $keyId id of the key + * + * @return boolean + */ + public function deleteFileKey($path, $keyId) { + $keyDir = $this->getFileKeyDir($path); + return $this->view->unlink($keyDir . $keyId); + } + + /** + * delete system-wide encryption keys not related to a specific user, + * e.g something like a key for public link shares + * + * @param string $keyId id of the key + * + * @return boolean + */ + public function deleteSystemUserKey($keyId) { + $path = $this->constructUserKeyPath($keyId); + return $this->view->unlink($path); + } + + + /** + * construct path to users key + * + * @param string $keyId + * @param string $uid + * @return string + */ + protected function constructUserKeyPath($keyId, $uid = null) { + + if ($uid === null) { + $path = $this->encryption_base_dir . '/' . $this->encryptionModuleId . '/' . $keyId; + } else { + $path = '/' . $uid . $this->encryption_base_dir . '/' + . $this->encryptionModuleId . '/' . $uid . '.' . $keyId; + } + + return $path; + } /** * read key from hard disk diff --git a/lib/public/encryption/keys/istorage.php b/lib/public/encryption/keys/istorage.php index c4c970804e..3a2562102c 100644 --- a/lib/public/encryption/keys/istorage.php +++ b/lib/public/encryption/keys/istorage.php @@ -113,6 +113,7 @@ interface IStorage { public function deleteAllFileKeys($path); /** + * delete system-wide encryption keys not related to a specific user, * e.g something like a key for public link shares *