aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private
diff options
context:
space:
mode:
authorRoeland Jago Douma <rullzer@users.noreply.github.com>2020-09-01 20:32:21 +0200
committerGitHub <noreply@github.com>2020-09-01 20:32:21 +0200
commit6bda2c26c765e7d563915591d20836005743d265 (patch)
tree406e842aba11a8311c1c569e73ca9f763f4842a4 /lib/private
parent2b192e7061c9f0324f209bdb3de6f5f9bf2b1dcd (diff)
parente0ae37745a85cb08fd24f178d588a8659726f907 (diff)
downloadnextcloud-server-6bda2c26c765e7d563915591d20836005743d265.tar.gz
nextcloud-server-6bda2c26c765e7d563915591d20836005743d265.zip
Merge pull request #22423 from nextcloud/bugfix/noid/direct-editing-encryption
Do not expose direct editing if no master key is available
Diffstat (limited to 'lib/private')
-rw-r--r--lib/private/DirectEditing/Manager.php35
1 files changed, 29 insertions, 6 deletions
diff --git a/lib/private/DirectEditing/Manager.php b/lib/private/DirectEditing/Manager.php
index c3098fb1a97..3542aeed252 100644
--- a/lib/private/DirectEditing/Manager.php
+++ b/lib/private/DirectEditing/Manager.php
@@ -35,6 +35,7 @@ use OCP\DirectEditing\ACreateFromTemplate;
use OCP\DirectEditing\IEditor;
use \OCP\DirectEditing\IManager;
use OCP\DirectEditing\IToken;
+use OCP\Encryption\IManager as EncryptionManager;
use OCP\Files\File;
use OCP\Files\IRootFolder;
use OCP\Files\Node;
@@ -45,6 +46,7 @@ use OCP\IUserSession;
use OCP\L10N\IFactory;
use OCP\Security\ISecureRandom;
use OCP\Share\IShare;
+use Throwable;
use function array_key_exists;
use function in_array;
@@ -55,30 +57,33 @@ class Manager implements IManager {
/** @var IEditor[] */
private $editors = [];
-
/** @var IDBConnection */
private $connection;
- /**
- * @var ISecureRandom
- */
+ /** @var ISecureRandom */
private $random;
+ /** @var string|null */
private $userId;
+ /** @var IRootFolder */
private $rootFolder;
/** @var IL10N */
private $l10n;
+ /** @var EncryptionManager */
+ private $encryptionManager;
public function __construct(
ISecureRandom $random,
IDBConnection $connection,
IUserSession $userSession,
IRootFolder $rootFolder,
- IFactory $l10nFactory
+ IFactory $l10nFactory,
+ EncryptionManager $encryptionManager
) {
$this->random = $random;
$this->connection = $connection;
$this->userId = $userSession->getUser() ? $userSession->getUser()->getUID() : null;
$this->rootFolder = $rootFolder;
$this->l10n = $l10nFactory->get('core');
+ $this->encryptionManager = $encryptionManager;
}
public function registerDirectEditor(IEditor $directEditor): void {
@@ -171,7 +176,7 @@ class Manager implements IManager {
}
$editor = $this->getEditor($tokenObject->getEditor());
$this->accessToken($token);
- } catch (\Throwable $throwable) {
+ } catch (Throwable $throwable) {
$this->invalidateToken($token);
return new NotFoundResponse();
}
@@ -275,4 +280,22 @@ class Manager implements IManager {
}
return $files[0];
}
+
+ public function isEnabled(): bool {
+ if (!$this->encryptionManager->isEnabled()) {
+ return true;
+ }
+
+ try {
+ $moduleId = $this->encryptionManager->getDefaultEncryptionModuleId();
+ $module = $this->encryptionManager->getEncryptionModule($moduleId);
+ /** @var \OCA\Encryption\Util $util */
+ $util = \OC::$server->get(\OCA\Encryption\Util::class);
+ if ($module->isReadyForUser($this->userId) && $util->isMasterKeyEnabled()) {
+ return true;
+ }
+ } catch (Throwable $e) {
+ }
+ return false;
+ }
}