From dd58e5290f0790157df6077471327ebd9affb03f Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Wed, 21 Aug 2024 21:58:10 +0200 Subject: [PATCH] feat: Use new password context in sharing API Signed-off-by: Ferdinand Thiessen --- .../lib/Controller/ShareController.php | 5 +- apps/sharebymail/lib/ShareByMailProvider.php | 3 +- .../tests/ShareByMailProviderTest.php | 90 ++++++++----------- 3 files changed, 41 insertions(+), 57 deletions(-) diff --git a/apps/files_sharing/lib/Controller/ShareController.php b/apps/files_sharing/lib/Controller/ShareController.php index 642065c99832b..25af4862ca405 100644 --- a/apps/files_sharing/lib/Controller/ShareController.php +++ b/apps/files_sharing/lib/Controller/ShareController.php @@ -33,13 +33,14 @@ use OCP\ISession; use OCP\IURLGenerator; use OCP\IUserManager; +use OCP\Security\Events\GenerateSecurePasswordEvent; use OCP\Security\ISecureRandom; +use OCP\Security\PasswordContext; use OCP\Share; use OCP\Share\Exceptions\ShareNotFound; use OCP\Share\IManager as ShareManager; use OCP\Share\IPublicShareTemplateFactory; use OCP\Share\IShare; -use OCP\Template; /** * @package OCA\Files_Sharing\Controllers @@ -156,7 +157,7 @@ protected function validateIdentity(?string $identityToken = null): bool { * Generates a password for the share, respecting any password policy defined */ protected function generatePassword(): void { - $event = new \OCP\Security\Events\GenerateSecurePasswordEvent(); + $event = new GenerateSecurePasswordEvent(PasswordContext::SHARING); $this->eventDispatcher->dispatchTyped($event); $password = $event->getPassword() ?? $this->secureRandom->generate(20); diff --git a/apps/sharebymail/lib/ShareByMailProvider.php b/apps/sharebymail/lib/ShareByMailProvider.php index b21f6440c648f..d4f7189a3cccc 100644 --- a/apps/sharebymail/lib/ShareByMailProvider.php +++ b/apps/sharebymail/lib/ShareByMailProvider.php @@ -28,6 +28,7 @@ use OCP\Security\Events\GenerateSecurePasswordEvent; use OCP\Security\IHasher; use OCP\Security\ISecureRandom; +use OCP\Security\PasswordContext; use OCP\Share\Exceptions\GenericShareException; use OCP\Share\Exceptions\ShareNotFound; use OCP\Share\IAttributes; @@ -131,7 +132,7 @@ protected function autoGeneratePassword(IShare $share): string { ); } - $passwordEvent = new GenerateSecurePasswordEvent(); + $passwordEvent = new GenerateSecurePasswordEvent(PasswordContext::SHARING); $this->eventDispatcher->dispatchTyped($passwordEvent); $password = $passwordEvent->getPassword(); diff --git a/apps/sharebymail/tests/ShareByMailProviderTest.php b/apps/sharebymail/tests/ShareByMailProviderTest.php index e03fba723128e..382a65154eb72 100644 --- a/apps/sharebymail/tests/ShareByMailProviderTest.php +++ b/apps/sharebymail/tests/ShareByMailProviderTest.php @@ -9,10 +9,12 @@ use OC\Mail\Message; use OCA\ShareByMail\Settings\SettingsManager; use OCA\ShareByMail\ShareByMailProvider; +use OCP\Activity\IManager as IActivityManager; use OCP\Defaults; use OCP\EventDispatcher\IEventDispatcher; use OCP\Files\File; use OCP\Files\IRootFolder; +use OCP\Files\Node; use OCP\IConfig; use OCP\IDBConnection; use OCP\IL10N; @@ -25,9 +27,11 @@ use OCP\Security\Events\GenerateSecurePasswordEvent; use OCP\Security\IHasher; use OCP\Security\ISecureRandom; +use OCP\Security\PasswordContext; use OCP\Share\IAttributes; use OCP\Share\IManager; use OCP\Share\IShare; +use PHPUnit\Framework\MockObject\MockObject; use Psr\Log\LoggerInterface; use Test\TestCase; @@ -38,65 +42,36 @@ * @group DB */ class ShareByMailProviderTest extends TestCase { - /** @var IConfig */ - private $config; - - /** @var IDBConnection */ - private $connection; - - /** @var IManager | \PHPUnit\Framework\MockObject\MockObject */ - private $shareManager; - - /** @var IL10N | \PHPUnit\Framework\MockObject\MockObject */ - private $l; - - /** @var LoggerInterface | \PHPUnit\Framework\MockObject\MockObject */ - private $logger; - - /** @var IRootFolder | \PHPUnit\Framework\MockObject\MockObject */ - private $rootFolder; - - /** @var IUserManager | \PHPUnit\Framework\MockObject\MockObject */ - private $userManager; - - /** @var ISecureRandom | \PHPUnit\Framework\MockObject\MockObject */ - private $secureRandom; - - /** @var IMailer | \PHPUnit\Framework\MockObject\MockObject */ - private $mailer; - - /** @var IURLGenerator | \PHPUnit\Framework\MockObject\MockObject */ - private $urlGenerator; - - /** @var IShare | \PHPUnit\Framework\MockObject\MockObject */ - private $share; - - /** @var \OCP\Activity\IManager | \PHPUnit\Framework\MockObject\MockObject */ - private $activityManager; - - /** @var SettingsManager | \PHPUnit\Framework\MockObject\MockObject */ - private $settingsManager; - - /** @var Defaults|\PHPUnit\Framework\MockObject\MockObject */ - private $defaults; - - /** @var IHasher | \PHPUnit\Framework\MockObject\MockObject */ - private $hasher; - - /** @var IEventDispatcher */ - private $eventDispatcher; + + private IDBConnection $connection; + + private IL10N&MockObject $l; + private IShare&MockObject $share; + private IConfig&MockObject $config; + private IMailer&MockObject $mailer; + private IHasher&MockObject $hasher; + private Defaults&MockObject $defaults; + private IManager&MockObject $shareManager; + private LoggerInterface&MockObject $logger; + private IRootFolder&MockObject $rootFolder; + private IUserManager&MockObject $userManager; + private ISecureRandom&MockObject $secureRandom; + private IURLGenerator&MockObject $urlGenerator; + private SettingsManager&MockObject $settingsManager; + private IActivityManager&MockObject $activityManager; + private IEventDispatcher&MockObject $eventDispatcher; protected function setUp(): void { parent::setUp(); - $this->config = $this->getMockBuilder(IConfig::class)->getMock(); - $this->connection = \OC::$server->getDatabaseConnection(); + $this->connection = \OCP\Server::get(IDBConnection::class); $this->l = $this->getMockBuilder(IL10N::class)->getMock(); $this->l->method('t') ->willReturnCallback(function ($text, $parameters = []) { return vsprintf($text, $parameters); }); + $this->config = $this->getMockBuilder(IConfig::class)->getMock(); $this->logger = $this->getMockBuilder(LoggerInterface::class)->getMock(); $this->rootFolder = $this->getMockBuilder('OCP\Files\IRootFolder')->getMock(); $this->userManager = $this->getMockBuilder(IUserManager::class)->getMock(); @@ -165,7 +140,10 @@ private function getInstance(array $mockedMethods = []) { } protected function tearDown(): void { - $this->connection->getQueryBuilder()->delete('share')->execute(); + $this->connection + ->getQueryBuilder() + ->delete('share') + ->executeStatement(); parent::tearDown(); } @@ -305,7 +283,11 @@ public function testCreateSendPasswordByMailWithPasswordAndWithoutEnforcedPasswo // Assume the mail address is valid. $this->mailer->expects($this->any())->method('validateMailAddress')->willReturn(true); - $instance = $this->getInstance(['getSharedWith', 'createMailShare', 'getRawShare', 'createShareObject', 'createShareActivity', 'autoGeneratePassword', 'createPasswordSendActivity', 'sendEmail', 'sendPassword', 'sendPasswordToOwner']); + $instance = $this->getInstance([ + 'getSharedWith', 'createMailShare', 'getRawShare', 'createShareObject', + 'createShareActivity', 'autoGeneratePassword', 'createPasswordSendActivity', + 'sendEmail', 'sendPassword', 'sendPasswordToOwner', + ]); $instance->expects($this->once())->method('getSharedWith')->willReturn([]); $instance->expects($this->once())->method('createMailShare')->with($share)->willReturn(42); @@ -361,7 +343,7 @@ public function testCreateSendPasswordByMailWithEnforcedPasswordProtectionWithPe ->willReturn('autogeneratedPassword'); $this->eventDispatcher->expects($this->once()) ->method('dispatchTyped') - ->with(new GenerateSecurePasswordEvent()); + ->with(new GenerateSecurePasswordEvent(PasswordContext::SHARING)); // Assume the mail address is valid. $this->mailer->expects($this->any())->method('validateMailAddress')->willReturn(true); @@ -822,7 +804,7 @@ public function dataUpdateSendPassword() { * @param bool sendMail */ public function testUpdateSendPassword($plainTextPassword, string $originalPassword, string $newPassword, $originalSendPasswordByTalk, $newSendPasswordByTalk, bool $sendMail) { - $node = $this->getMockBuilder(File::class)->getMock(); + $node = $this->createMock(File::class); $node->expects($this->any())->method('getName')->willReturn('filename'); $this->settingsManager->method('sendPasswordByMail')->willReturn(true); @@ -927,7 +909,7 @@ public function testGetShareByPath() { $permissions = 1; $token = 'token'; - $node = $this->getMockBuilder('OCP\Files\Node')->getMock(); + $node = $this->createMock(Node::class); $node->expects($this->once())->method('getId')->willReturn($itemSource);