summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2020-08-11 21:59:21 +0200
committerGitHub <noreply@github.com>2020-08-11 21:59:21 +0200
commit138f47a1b980aaceb116b256b8ccf14f523e7e67 (patch)
treef7ea3ec15d7530b4a1b80d19e2a34f7d1f0bd667
parent50fdd45e9bbeaff811888ea5ddc984a5966bd6f6 (diff)
parent4dd507675c8583a28b948872f6e2e9e3df043fb7 (diff)
downloadnextcloud-server-138f47a1b980aaceb116b256b8ccf14f523e7e67.tar.gz
nextcloud-server-138f47a1b980aaceb116b256b8ccf14f523e7e67.zip
Merge pull request #22162 from nextcloud/enh/noid/password-generator-sharebymail
ShareByMail: Migrate to GenerateSecurePasswordEvent
-rw-r--r--apps/sharebymail/lib/ShareByMailProvider.php56
-rw-r--r--apps/sharebymail/tests/ShareByMailProviderTest.php25
-rw-r--r--lib/private/Share20/ProviderFactory.php3
3 files changed, 30 insertions, 54 deletions
diff --git a/apps/sharebymail/lib/ShareByMailProvider.php b/apps/sharebymail/lib/ShareByMailProvider.php
index 0f1afd43ba4..1365899271e 100644
--- a/apps/sharebymail/lib/ShareByMailProvider.php
+++ b/apps/sharebymail/lib/ShareByMailProvider.php
@@ -36,7 +36,6 @@
namespace OCA\ShareByMail;
-use OC\CapabilitiesManager;
use OC\HintException;
use OC\Share20\Exception\InvalidShare;
use OC\Share20\Share;
@@ -45,6 +44,7 @@ use OCA\ShareByMail\Settings\SettingsManager;
use OCP\Activity\IManager;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\Defaults;
+use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\Folder;
use OCP\Files\IRootFolder;
use OCP\Files\Node;
@@ -55,6 +55,7 @@ use OCP\IURLGenerator;
use OCP\IUser;
use OCP\IUserManager;
use OCP\Mail\IMailer;
+use OCP\Security\Events\GenerateSecurePasswordEvent;
use OCP\Security\IHasher;
use OCP\Security\ISecureRandom;
use OCP\Share\Exceptions\GenericShareException;
@@ -105,8 +106,8 @@ class ShareByMailProvider implements IShareProvider {
/** @var IHasher */
private $hasher;
- /** @var CapabilitiesManager */
- private $capabilitiesManager;
+ /** @var IEventDispatcher */
+ private $eventDispatcher;
/**
* Return the identifier of this provider.
@@ -117,23 +118,6 @@ class ShareByMailProvider implements IShareProvider {
return 'ocMailShare';
}
- /**
- * DefaultShareProvider constructor.
- *
- * @param IDBConnection $connection
- * @param ISecureRandom $secureRandom
- * @param IUserManager $userManager
- * @param IRootFolder $rootFolder
- * @param IL10N $l
- * @param ILogger $logger
- * @param IMailer $mailer
- * @param IURLGenerator $urlGenerator
- * @param IManager $activityManager
- * @param SettingsManager $settingsManager
- * @param Defaults $defaults
- * @param IHasher $hasher
- * @param CapabilitiesManager $capabilitiesManager
- */
public function __construct(
IDBConnection $connection,
ISecureRandom $secureRandom,
@@ -147,7 +131,7 @@ class ShareByMailProvider implements IShareProvider {
SettingsManager $settingsManager,
Defaults $defaults,
IHasher $hasher,
- CapabilitiesManager $capabilitiesManager
+ IEventDispatcher $eventDispatcher
) {
$this->dbConnection = $connection;
$this->secureRandom = $secureRandom;
@@ -161,7 +145,7 @@ class ShareByMailProvider implements IShareProvider {
$this->settingsManager = $settingsManager;
$this->defaults = $defaults;
$this->hasher = $hasher;
- $this->capabilitiesManager = $capabilitiesManager;
+ $this->eventDispatcher = $eventDispatcher;
}
/**
@@ -227,31 +211,15 @@ class ShareByMailProvider implements IShareProvider {
);
}
- $passwordPolicy = $this->getPasswordPolicy();
- $passwordCharset = ISecureRandom::CHAR_LOWER . ISecureRandom::CHAR_UPPER . ISecureRandom::CHAR_DIGITS;
- $passwordLength = 8;
- if (!empty($passwordPolicy)) {
- $passwordLength = (int)$passwordPolicy['minLength'] > 0 ? (int)$passwordPolicy['minLength'] : $passwordLength;
- $passwordCharset .= $passwordPolicy['enforceSpecialCharacters'] ? ISecureRandom::CHAR_SYMBOLS : '';
- }
+ $passwordEvent = new GenerateSecurePasswordEvent();
+ $this->eventDispatcher->dispatchTyped($passwordEvent);
- $password = $this->secureRandom->generate($passwordLength, $passwordCharset);
-
- return $password;
- }
-
- /**
- * get password policy
- *
- * @return array
- */
- protected function getPasswordPolicy() {
- $capabilities = $this->capabilitiesManager->getCapabilities();
- if (isset($capabilities['password_policy'])) {
- return $capabilities['password_policy'];
+ $password = $passwordEvent->getPassword();
+ if ($password === null) {
+ $password = $this->secureRandom->generate(8, ISecureRandom::CHAR_LOWER . ISecureRandom::CHAR_UPPER . ISecureRandom::CHAR_DIGITS);
}
- return [];
+ return $password;
}
/**
diff --git a/apps/sharebymail/tests/ShareByMailProviderTest.php b/apps/sharebymail/tests/ShareByMailProviderTest.php
index aeafc86c509..628487b2aee 100644
--- a/apps/sharebymail/tests/ShareByMailProviderTest.php
+++ b/apps/sharebymail/tests/ShareByMailProviderTest.php
@@ -30,11 +30,11 @@
namespace OCA\ShareByMail\Tests;
-use OC\CapabilitiesManager;
use OC\Mail\Message;
use OCA\ShareByMail\Settings\SettingsManager;
use OCA\ShareByMail\ShareByMailProvider;
use OCP\Defaults;
+use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\File;
use OCP\Files\IRootFolder;
use OCP\IDBConnection;
@@ -46,10 +46,12 @@ use OCP\IUserManager;
use OCP\Mail\IEMailTemplate;
use OCP\Mail\IMailer;
use OCP\Mail\IMessage;
+use OCP\Security\Events\GenerateSecurePasswordEvent;
use OCP\Security\IHasher;
use OCP\Security\ISecureRandom;
use OCP\Share\IManager;
use OCP\Share\IShare;
+use PHPUnit\Framework\MockObject\MockObject;
use Test\TestCase;
/**
@@ -102,8 +104,8 @@ class ShareByMailProviderTest extends TestCase {
/** @var IHasher | \PHPUnit_Framework_MockObject_MockObject */
private $hasher;
- /** @var CapabilitiesManager | \PHPUnit_Framework_MockObject_MockObject */
- private $capabilitiesManager;
+ /** @var IEventDispatcher */
+ private $eventDispatcher;
protected function setUp(): void {
parent::setUp();
@@ -127,7 +129,7 @@ class ShareByMailProviderTest extends TestCase {
$this->settingsManager = $this->getMockBuilder(SettingsManager::class)->disableOriginalConstructor()->getMock();
$this->defaults = $this->createMock(Defaults::class);
$this->hasher = $this->getMockBuilder(IHasher::class)->getMock();
- $this->capabilitiesManager = $this->getMockBuilder(CapabilitiesManager::class)->disableOriginalConstructor()->getMock();
+ $this->eventDispatcher = $this->getMockBuilder(IEventDispatcher::class)->getMock();
$this->userManager->expects($this->any())->method('userExists')->willReturn(true);
}
@@ -154,7 +156,7 @@ class ShareByMailProviderTest extends TestCase {
$this->settingsManager,
$this->defaults,
$this->hasher,
- $this->capabilitiesManager
+ $this->eventDispatcher
]
);
@@ -176,7 +178,7 @@ class ShareByMailProviderTest extends TestCase {
$this->settingsManager,
$this->defaults,
$this->hasher,
- $this->capabilitiesManager
+ $this->eventDispatcher
);
}
@@ -294,7 +296,15 @@ class ShareByMailProviderTest extends TestCase {
$node = $this->getMockBuilder(File::class)->getMock();
$node->expects($this->any())->method('getName')->willReturn('filename');
- $instance = $this->getInstance(['getSharedWith', 'createMailShare', 'getRawShare', 'createShareObject', 'createShareActivity', 'autoGeneratePassword', 'createPasswordSendActivity']);
+ $this->secureRandom->expects($this->once())
+ ->method('generate')
+ ->with(8, ISecureRandom::CHAR_LOWER . ISecureRandom::CHAR_UPPER . ISecureRandom::CHAR_DIGITS)
+ ->willReturn('autogeneratedPassword');
+ $this->eventDispatcher->expects($this->once())
+ ->method('dispatchTyped')
+ ->with(new GenerateSecurePasswordEvent());
+
+ $instance = $this->getInstance(['getSharedWith', 'createMailShare', 'getRawShare', 'createShareObject', 'createShareActivity', 'createPasswordSendActivity']);
$instance->expects($this->once())->method('getSharedWith')->willReturn([]);
$instance->expects($this->once())->method('createMailShare')->with($share)->willReturn(42);
@@ -310,7 +320,6 @@ class ShareByMailProviderTest extends TestCase {
// The autogenerated password should be mailed to the receiver of the share.
$this->settingsManager->expects($this->any())->method('enforcePasswordProtection')->willReturn(true);
$this->settingsManager->expects($this->any())->method('sendPasswordByMail')->willReturn(true);
- $instance->expects($this->once())->method('autoGeneratePassword')->with($share)->willReturn('autogeneratedPassword');
$message = $this->createMock(IMessage::class);
$message->expects($this->once())->method('setTo')->with(['receiver@example.com']);
diff --git a/lib/private/Share20/ProviderFactory.php b/lib/private/Share20/ProviderFactory.php
index 0606fe9c849..ea374931811 100644
--- a/lib/private/Share20/ProviderFactory.php
+++ b/lib/private/Share20/ProviderFactory.php
@@ -30,7 +30,6 @@
namespace OC\Share20;
-use OC\CapabilitiesManager;
use OC\Share20\Exception\ProviderException;
use OCA\FederatedFileSharing\AddressHandler;
use OCA\FederatedFileSharing\FederatedShareProvider;
@@ -184,7 +183,7 @@ class ProviderFactory implements IProviderFactory {
$settingsManager,
$this->serverContainer->query(Defaults::class),
$this->serverContainer->getHasher(),
- $this->serverContainer->query(CapabilitiesManager::class)
+ $this->serverContainer->get(IEventDispatcher::class)
);
}