diff --git a/apps/encryption/lib/Users/Setup.php b/apps/encryption/lib/Users/Setup.php index f2189d6dab25a..7f50fd8b23e13 100644 --- a/apps/encryption/lib/Users/Setup.php +++ b/apps/encryption/lib/Users/Setup.php @@ -9,13 +9,18 @@ use OCA\Encryption\Crypto\Crypt; use OCA\Encryption\KeyManager; +use OCP\ICache; +use OCP\ICacheFactory; class Setup { + private readonly ICache $cache; public function __construct( private Crypt $crypt, private KeyManager $keyManager, + ICacheFactory $cacheFactory, ) { + $this->cache = $cacheFactory->createLocal('encryption-setup'); } /** @@ -35,7 +40,10 @@ public function setupUser($uid, $password) { * make sure that all system keys exists */ public function setupSystem() { - $this->keyManager->validateShareKey(); - $this->keyManager->validateMasterKey(); + if (!$this->cache->get('keys-validated')) { + $this->keyManager->validateShareKey(); + $this->keyManager->validateMasterKey(); + $this->cache->set('keys-validated', true); + } } } diff --git a/apps/encryption/tests/Command/FixEncryptedVersionTest.php b/apps/encryption/tests/Command/FixEncryptedVersionTest.php index d0af359183b49..2f55411142f7f 100644 --- a/apps/encryption/tests/Command/FixEncryptedVersionTest.php +++ b/apps/encryption/tests/Command/FixEncryptedVersionTest.php @@ -12,6 +12,7 @@ use OC\Files\View; use OCA\Encryption\Command\FixEncryptedVersion; +use OCA\Encryption\KeyManager; use OCA\Encryption\Util; use OCP\Files\IRootFolder; use OCP\IConfig; @@ -47,6 +48,8 @@ class FixEncryptedVersionTest extends TestCase { public function setUp(): void { parent::setUp(); + Server::get(KeyManager::class)->validateMasterKey(); + Server::get(KeyManager::class)->validateShareKey(); Server::get(IConfig::class)->setAppValue('encryption', 'useMasterKey', '1'); diff --git a/apps/encryption/tests/EncryptedStorageTest.php b/apps/encryption/tests/EncryptedStorageTest.php index 59f419a7f7a1a..4b7a4979b36b9 100644 --- a/apps/encryption/tests/EncryptedStorageTest.php +++ b/apps/encryption/tests/EncryptedStorageTest.php @@ -11,6 +11,7 @@ use OC\Files\Storage\Temporary; use OC\Files\Storage\Wrapper\Encryption; use OC\Files\View; +use OCA\Encryption\KeyManager; use OCP\Files\Mount\IMountManager; use OCP\Files\Storage\IDisableEncryptionStorage; use OCP\Server; @@ -32,6 +33,8 @@ class EncryptedStorageTest extends TestCase { use UserTrait; public function testMoveFromEncrypted(): void { + Server::get(KeyManager::class)->validateMasterKey(); + Server::get(KeyManager::class)->validateShareKey(); $this->createUser('test1', 'test2'); $this->setupForUser('test1', 'test2'); diff --git a/apps/encryption/tests/Users/SetupTest.php b/apps/encryption/tests/Users/SetupTest.php index 6b2b8b4cad5d1..fa62deffad16b 100644 --- a/apps/encryption/tests/Users/SetupTest.php +++ b/apps/encryption/tests/Users/SetupTest.php @@ -12,6 +12,8 @@ use OCA\Encryption\Crypto\Crypt; use OCA\Encryption\KeyManager; use OCA\Encryption\Users\Setup; +use OCP\ICache; +use OCP\ICacheFactory; use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; @@ -32,9 +34,16 @@ protected function setUp(): void { ->disableOriginalConstructor() ->getMock(); + $cache = $this->createMock(ICache::class); + $cacheFactory = $this->createMock(ICacheFactory::class); + $cacheFactory->method('createLocal') + ->willReturn($cache); + $this->instance = new Setup( $this->cryptMock, - $this->keyManagerMock); + $this->keyManagerMock, + $cacheFactory, + ); }