Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
feat: Use new password context in sharing API
Signed-off-by: Ferdinand Thiessen <[email protected]>
  • Loading branch information
susnux committed Aug 22, 2024
commit dd58e5290f0790157df6077471327ebd9affb03f
5 changes: 3 additions & 2 deletions apps/files_sharing/lib/Controller/ShareController.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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);

Expand Down
3 changes: 2 additions & 1 deletion apps/sharebymail/lib/ShareByMailProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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();
Expand Down
90 changes: 36 additions & 54 deletions apps/sharebymail/tests/ShareByMailProviderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;

Expand All @@ -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();
Expand Down Expand Up @@ -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();
}
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);


Expand Down