From 664b2bb7af2c8253aa0bbade42531ad4a3ef6bab Mon Sep 17 00:00:00 2001 From: =?utf8?q?Thomas=20M=C3=BCller?= Date: Wed, 1 Apr 2015 16:36:08 +0200 Subject: [PATCH] cleaning up exception mess --- apps/encryption/lib/crypto/crypt.php | 2 +- .../exceptions/multikeydecryptexception.php | 4 ++- .../exceptions/multikeyencryptexception.php | 4 ++- .../exceptions/privatekeymissingexception.php | 14 ++++++++-- .../exceptions/publickeymissingexception.php | 20 +++++++++++++ apps/encryption/lib/keymanager.php | 8 +++--- apps/encryption/lib/session.php | 2 +- lib/private/connector/sabre/file.php | 4 +-- .../exceptions/decryptionfailedexception.php | 1 + .../emptyencryptiondataexception.php | 1 + .../exceptions/encryptionfailedexception.php | 1 + .../encryptionheaderkeyexistsexception.php | 13 +++++---- .../encryptionheadertolargeexception.php | 5 ++++ .../modulealreadyexistsexception.php | 12 +++++++- .../moduledoesnotexistsexception.php | 4 ++- .../exceptions/publickeymissingexception.php | 28 ------------------- .../unexpectedblocksizeexception.php | 28 ------------------- ...expectedendofencryptionheaderexception.php | 28 ------------------- .../exceptions/unknowncipherexception.php | 3 +- lib/private/encryption/keys/storage.php | 4 +-- lib/private/encryption/manager.php | 3 +- lib/private/encryption/util.php | 4 +-- .../exceptions/genericencryptionexception.php | 9 +++++- 23 files changed, 91 insertions(+), 111 deletions(-) create mode 100644 apps/encryption/lib/exceptions/publickeymissingexception.php delete mode 100644 lib/private/encryption/exceptions/publickeymissingexception.php delete mode 100644 lib/private/encryption/exceptions/unexpectedblocksizeexception.php delete mode 100644 lib/private/encryption/exceptions/unexpectedendofencryptionheaderexception.php rename lib/{private => public}/encryption/exceptions/genericencryptionexception.php (76%) diff --git a/apps/encryption/lib/crypto/crypt.php b/apps/encryption/lib/crypto/crypt.php index 6b79057fe7e..80878b3ddb2 100644 --- a/apps/encryption/lib/crypto/crypt.php +++ b/apps/encryption/lib/crypto/crypt.php @@ -24,9 +24,9 @@ namespace OCA\Encryption\Crypto; use OC\Encryption\Exceptions\DecryptionFailedException; use OC\Encryption\Exceptions\EncryptionFailedException; -use OC\Encryption\Exceptions\GenericEncryptionException; use OCA\Encryption\Exceptions\MultiKeyDecryptException; use OCA\Encryption\Exceptions\MultiKeyEncryptException; +use OCP\Encryption\Exceptions\GenericEncryptionException; use OCP\IConfig; use OCP\ILogger; use OCP\IUser; diff --git a/apps/encryption/lib/exceptions/multikeydecryptexception.php b/apps/encryption/lib/exceptions/multikeydecryptexception.php index 36a95544e61..1466d35eda3 100644 --- a/apps/encryption/lib/exceptions/multikeydecryptexception.php +++ b/apps/encryption/lib/exceptions/multikeydecryptexception.php @@ -2,6 +2,8 @@ namespace OCA\Encryption\Exceptions; -class MultiKeyDecryptException extends \Exception { +use OCP\Encryption\Exceptions\GenericEncryptionException; + +class MultiKeyDecryptException extends GenericEncryptionException { } diff --git a/apps/encryption/lib/exceptions/multikeyencryptexception.php b/apps/encryption/lib/exceptions/multikeyencryptexception.php index e518a09d1cc..daf528e2cf7 100644 --- a/apps/encryption/lib/exceptions/multikeyencryptexception.php +++ b/apps/encryption/lib/exceptions/multikeyencryptexception.php @@ -2,6 +2,8 @@ namespace OCA\Encryption\Exceptions; -class MultiKeyEncryptException extends \Exception { +use OCP\Encryption\Exceptions\GenericEncryptionException; + +class MultiKeyEncryptException extends GenericEncryptionException { } diff --git a/apps/encryption/lib/exceptions/privatekeymissingexception.php b/apps/encryption/lib/exceptions/privatekeymissingexception.php index ddc3d11cdbc..50d75870b20 100644 --- a/apps/encryption/lib/exceptions/privatekeymissingexception.php +++ b/apps/encryption/lib/exceptions/privatekeymissingexception.php @@ -19,10 +19,20 @@ * */ - namespace OCA\Encryption\Exceptions; +use OCP\Encryption\Exceptions\GenericEncryptionException; + +class PrivateKeyMissingException extends GenericEncryptionException { -class PrivateKeyMissingException extends \Exception{ + /** + * @param string $userId + */ + public function __construct($userId) { + if(empty($userId)) { + $userId = ""; + } + parent::__construct("Private Key missing for user: $userId"); + } } diff --git a/apps/encryption/lib/exceptions/publickeymissingexception.php b/apps/encryption/lib/exceptions/publickeymissingexception.php new file mode 100644 index 00000000000..9638c28e427 --- /dev/null +++ b/apps/encryption/lib/exceptions/publickeymissingexception.php @@ -0,0 +1,20 @@ +"; + } + parent::__construct("Public Key missing for user: $userId"); + } + +} diff --git a/apps/encryption/lib/keymanager.php b/apps/encryption/lib/keymanager.php index c7e0f2617f5..d2659f55a77 100644 --- a/apps/encryption/lib/keymanager.php +++ b/apps/encryption/lib/keymanager.php @@ -4,7 +4,7 @@ namespace OCA\Encryption; use OC\Encryption\Exceptions\DecryptionFailedException; use OCA\Encryption\Exceptions\PrivateKeyMissingException; -use OC\Encryption\Exceptions\PublicKeyMissingException; +use OCA\Encryption\Exceptions\PublicKeyMissingException; use OCA\Encryption\Crypto\Crypt; use OCP\Encryption\Keys\IStorage; use OCP\IConfig; @@ -301,7 +301,7 @@ class KeyManager { if (strlen($privateKey) !== 0) { return $privateKey; } - throw new PrivateKeyMissingException(); + throw new PrivateKeyMissingException($userId); } /** @@ -393,7 +393,7 @@ class KeyManager { if (strlen($publicKey) !== 0) { return $publicKey; } - throw new PublicKeyMissingException(); + throw new PublicKeyMissingException($userId); } public function getPublicShareKeyId() { @@ -496,7 +496,7 @@ class KeyManager { if (!empty($accessList['public'])) { $publicShareKey = $this->getPublicShareKey(); if (empty($publicShareKey)) { - throw new PublicKeyMissingException(); + throw new PublicKeyMissingException($this->getPublicShareKeyId()); } $publicKeys[$this->getPublicShareKeyId()] = $publicShareKey; } diff --git a/apps/encryption/lib/session.php b/apps/encryption/lib/session.php index 5e973913769..82c7829ecbd 100644 --- a/apps/encryption/lib/session.php +++ b/apps/encryption/lib/session.php @@ -70,7 +70,7 @@ class Session { public function getPrivateKey() { $key = $this->session->get('privateKey'); if (is_null($key)) { - throw new Exceptions\PrivateKeyMissingException('no private key stored in session'); + throw new Exceptions\PrivateKeyMissingException('no private key stored in session', 0); } return $key; } diff --git a/lib/private/connector/sabre/file.php b/lib/private/connector/sabre/file.php index a436973ba91..f6f5daf2074 100644 --- a/lib/private/connector/sabre/file.php +++ b/lib/private/connector/sabre/file.php @@ -35,7 +35,7 @@ namespace OC\Connector\Sabre; -use OC\Encryption\Exceptions\GenericEncryptionException; +use OCP\Encryption\Exceptions\GenericEncryptionException; class File extends \OC\Connector\Sabre\Node implements \Sabre\DAV\IFile { @@ -184,7 +184,7 @@ class File extends \OC\Connector\Sabre\Node implements \Sabre\DAV\IFile { //throw exception if encryption is disabled but files are still encrypted try { return $this->fileView->fopen(ltrim($this->path, '/'), 'rb'); - } catch (\OCP\Encryption\Exception\EncryptionException $e) { + } catch (\OCP\Encryption\Exceptions\GenericEncryptionException $e) { throw new \Sabre\DAV\Exception\Forbidden($e->getMessage()); } catch (\OCP\Files\StorageNotAvailableException $e) { throw new \Sabre\DAV\Exception\ServiceUnavailable("Failed to open file: ".$e->getMessage()); diff --git a/lib/private/encryption/exceptions/decryptionfailedexception.php b/lib/private/encryption/exceptions/decryptionfailedexception.php index 43fea90fed8..f8b4fdf07fa 100644 --- a/lib/private/encryption/exceptions/decryptionfailedexception.php +++ b/lib/private/encryption/exceptions/decryptionfailedexception.php @@ -22,6 +22,7 @@ namespace OC\Encryption\Exceptions; +use OCP\Encryption\Exceptions\GenericEncryptionException; class DecryptionFailedException extends GenericEncryptionException { diff --git a/lib/private/encryption/exceptions/emptyencryptiondataexception.php b/lib/private/encryption/exceptions/emptyencryptiondataexception.php index ea181809856..d3dc9230047 100644 --- a/lib/private/encryption/exceptions/emptyencryptiondataexception.php +++ b/lib/private/encryption/exceptions/emptyencryptiondataexception.php @@ -22,6 +22,7 @@ namespace OC\Encryption\Exceptions; +use OCP\Encryption\Exceptions\GenericEncryptionException; class EmptyEncryptionDataException extends GenericEncryptionException{ diff --git a/lib/private/encryption/exceptions/encryptionfailedexception.php b/lib/private/encryption/exceptions/encryptionfailedexception.php index 9e6648f7bf5..ac489c73254 100644 --- a/lib/private/encryption/exceptions/encryptionfailedexception.php +++ b/lib/private/encryption/exceptions/encryptionfailedexception.php @@ -22,6 +22,7 @@ namespace OC\Encryption\Exceptions; +use OCP\Encryption\Exceptions\GenericEncryptionException; class EncryptionFailedException extends GenericEncryptionException{ diff --git a/lib/private/encryption/exceptions/encryptionheaderkeyexistsexception.php b/lib/private/encryption/exceptions/encryptionheaderkeyexistsexception.php index 23103b90c4f..5e8e48efd78 100644 --- a/lib/private/encryption/exceptions/encryptionheaderkeyexistsexception.php +++ b/lib/private/encryption/exceptions/encryptionheaderkeyexistsexception.php @@ -23,11 +23,14 @@ namespace OC\Encryption\Exceptions; +use OCP\Encryption\Exceptions\GenericEncryptionException; -class EncryptionHeaderKeyExistsException extends \Exception { - -} - -class EncryptionHeaderToLargeException extends \Exception { +class EncryptionHeaderKeyExistsException extends GenericEncryptionException { + /** + * @param string $key + */ + public function __construct($key) { + parent::__construct('header key "'. $key . '" already reserved by ownCloud'); + } } diff --git a/lib/private/encryption/exceptions/encryptionheadertolargeexception.php b/lib/private/encryption/exceptions/encryptionheadertolargeexception.php index cc980aa4beb..94a130d792d 100644 --- a/lib/private/encryption/exceptions/encryptionheadertolargeexception.php +++ b/lib/private/encryption/exceptions/encryptionheadertolargeexception.php @@ -22,7 +22,12 @@ namespace OC\Encryption\Exceptions; +use OCP\Encryption\Exceptions\GenericEncryptionException; class EncryptionHeaderToLargeException extends GenericEncryptionException { + public function __construct($key) { + parent::__construct('max header size exceeded'); + } + } diff --git a/lib/private/encryption/exceptions/modulealreadyexistsexception.php b/lib/private/encryption/exceptions/modulealreadyexistsexception.php index 41fc0188e24..fa1e70a5c36 100644 --- a/lib/private/encryption/exceptions/modulealreadyexistsexception.php +++ b/lib/private/encryption/exceptions/modulealreadyexistsexception.php @@ -23,6 +23,16 @@ namespace OC\Encryption\Exceptions; -class ModuleAlreadyExistsException extends \Exception { +use OCP\Encryption\Exceptions\GenericEncryptionException; + +class ModuleAlreadyExistsException extends GenericEncryptionException { + + /** + * @param string $id + * @param string $name + */ + public function __construct($id, $name) { + parent::__construct('Id "' . $id . '" already used by encryption module "' . $name . '"'); + } } diff --git a/lib/private/encryption/exceptions/moduledoesnotexistsexception.php b/lib/private/encryption/exceptions/moduledoesnotexistsexception.php index 5507bd03dab..2c699e8dc2d 100644 --- a/lib/private/encryption/exceptions/moduledoesnotexistsexception.php +++ b/lib/private/encryption/exceptions/moduledoesnotexistsexception.php @@ -23,6 +23,8 @@ namespace OC\Encryption\Exceptions; -class ModuleDoesNotExistsException extends \Exception { +use OCP\Encryption\Exceptions\GenericEncryptionException; + +class ModuleDoesNotExistsException extends GenericEncryptionException { } diff --git a/lib/private/encryption/exceptions/publickeymissingexception.php b/lib/private/encryption/exceptions/publickeymissingexception.php deleted file mode 100644 index d5f2aae42cc..00000000000 --- a/lib/private/encryption/exceptions/publickeymissingexception.php +++ /dev/null @@ -1,28 +0,0 @@ - - * @since 2/25/15, 9:39 AM - * @copyright Copyright (c) 2015, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see - * - */ - - -namespace OC\Encryption\Exceptions; - - -class PublicKeyMissingException extends GenericEncryptionException { - -} diff --git a/lib/private/encryption/exceptions/unexpectedblocksizeexception.php b/lib/private/encryption/exceptions/unexpectedblocksizeexception.php deleted file mode 100644 index 799d08e6bab..00000000000 --- a/lib/private/encryption/exceptions/unexpectedblocksizeexception.php +++ /dev/null @@ -1,28 +0,0 @@ - - * @since 2/25/15, 9:35 AM - * @copyright Copyright (c) 2015, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see - * - */ - - -namespace OC\Encryption\Exceptions; - - -interface UnexpectedBlockSize { - -} diff --git a/lib/private/encryption/exceptions/unexpectedendofencryptionheaderexception.php b/lib/private/encryption/exceptions/unexpectedendofencryptionheaderexception.php deleted file mode 100644 index 04f65cf7626..00000000000 --- a/lib/private/encryption/exceptions/unexpectedendofencryptionheaderexception.php +++ /dev/null @@ -1,28 +0,0 @@ - - * @since 2/25/15, 9:34 AM - * @copyright Copyright (c) 2015, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see - * - */ - - -namespace OC\Encryption\Exceptions; - - -class UnexpectedEndOfEncryptionHeaderException extends GenericEncryptionException { - -} diff --git a/lib/private/encryption/exceptions/unknowncipherexception.php b/lib/private/encryption/exceptions/unknowncipherexception.php index 5177af6106b..188f7403848 100644 --- a/lib/private/encryption/exceptions/unknowncipherexception.php +++ b/lib/private/encryption/exceptions/unknowncipherexception.php @@ -22,7 +22,8 @@ namespace OC\Encryption\Exceptions; +use OCP\Encryption\Exceptions\GenericEncryptionException; -class UnknownCipherException extends GenericEncryptionException{ +class UnknownCipherException extends GenericEncryptionException { } diff --git a/lib/private/encryption/keys/storage.php b/lib/private/encryption/keys/storage.php index 82753df1dc7..e4e3fb084f3 100644 --- a/lib/private/encryption/keys/storage.php +++ b/lib/private/encryption/keys/storage.php @@ -23,9 +23,9 @@ namespace OC\Encryption\Keys; -use OC\Encryption\Exceptions\GenericEncryptionException; use OC\Encryption\Util; use OC\Files\View; +use OCP\Encryption\Exceptions\GenericEncryptionException; class Storage implements \OCP\Encryption\Keys\IStorage { @@ -259,7 +259,7 @@ class Storage implements \OCP\Encryption\Keys\IStorage { private function getFileKeyDir($path) { if ($this->view->is_dir($path)) { - throw new GenericEncryptionException('file was expected but directory was given'); + throw new GenericEncryptionException("file was expected but directory was given: $path"); } list($owner, $filename) = $this->util->getUidAndFilename($path); diff --git a/lib/private/encryption/manager.php b/lib/private/encryption/manager.php index 77f02b0c489..f8ac174479e 100644 --- a/lib/private/encryption/manager.php +++ b/lib/private/encryption/manager.php @@ -70,8 +70,7 @@ class Manager implements \OCP\Encryption\IManager { $name = $module->getDisplayName(); if (isset($this->encryptionModules[$id])) { - $message = 'Id "' . $id . '" already used by encryption module "' . $name . '"'; - throw new Exceptions\ModuleAlreadyExistsException($message); + throw new Exceptions\ModuleAlreadyExistsException($id, $name); } $defaultEncryptionModuleId = $this->getDefaultEncryptionModuleId(); diff --git a/lib/private/encryption/util.php b/lib/private/encryption/util.php index 1183e6622bb..e2c7fa26e66 100644 --- a/lib/private/encryption/util.php +++ b/lib/private/encryption/util.php @@ -147,14 +147,14 @@ class Util { $header = self::HEADER_START . ':' . self::HEADER_ENCRYPTION_MODULE_KEY . ':' . $encryptionModule->getId() . ':'; foreach ($headerData as $key => $value) { if (in_array($key, $this->ocHeaderKeys)) { - throw new EncryptionHeaderKeyExistsException('header key "'. $key . '" already reserved by ownCloud'); + throw new EncryptionHeaderKeyExistsException($key); } $header .= $key . ':' . $value . ':'; } $header .= self::HEADER_END; if (strlen($header) > $this->getHeaderSize()) { - throw new EncryptionHeaderToLargeException('max header size exceeded'); + throw new EncryptionHeaderToLargeException(); } $paddedHeader = str_pad($header, $this->headerSize, self::HEADER_PADDING_CHAR, STR_PAD_RIGHT); diff --git a/lib/private/encryption/exceptions/genericencryptionexception.php b/lib/public/encryption/exceptions/genericencryptionexception.php similarity index 76% rename from lib/private/encryption/exceptions/genericencryptionexception.php rename to lib/public/encryption/exceptions/genericencryptionexception.php index 608e5e6010a..b7addd3b0c1 100644 --- a/lib/private/encryption/exceptions/genericencryptionexception.php +++ b/lib/public/encryption/exceptions/genericencryptionexception.php @@ -19,9 +19,16 @@ * */ -namespace OC\Encryption\Exceptions; +namespace OCP\Encryption\Exceptions; class GenericEncryptionException extends \Exception { + public function __construct($message = "", $code = 0, \Exception $previous = null) { + if (empty($message)) { + $message = 'Unspecified encryption exception'; + } + parent::__construct($message, $code, $previous); + } + } -- 2.39.5