Skip to content

Commit 0b80d63

Browse files
fixup! Add typed events for password_policy
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
1 parent fd0c278 commit 0b80d63

4 files changed

Lines changed: 56 additions & 47 deletions

File tree

lib/private/Share20/Manager.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
use OCP\IUserManager;
5656
use OCP\L10N\IFactory;
5757
use OCP\Mail\IMailer;
58+
use OCP\Security\Events\ValidatePasswordPolicyEvent;
5859
use OCP\Security\IHasher;
5960
use OCP\Security\ISecureRandom;
6061
use OCP\Share\Exceptions\GenericShareException;
@@ -191,8 +192,7 @@ protected function verifyPassword($password) {
191192

192193
// Let others verify the password
193194
try {
194-
$event = new GenericEvent($password);
195-
$this->eventDispatcher->dispatch('OCP\PasswordPolicy::validate', $event);
195+
$this->eventDispatcher->dispatch(new ValidatePasswordPolicyEvent($password));
196196
} catch (HintException $e) {
197197
throw new \Exception($e->getHint());
198198
}

lib/private/User/Database.php

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,9 @@
5858
namespace OC\User;
5959

6060
use OC\Cache\CappedMemoryCache;
61+
use OCP\EventDispatcher\IEventDispatcher;
6162
use OCP\IDBConnection;
63+
use OCP\Security\Events\ValidatePasswordPolicyEvent;
6264
use OCP\User\Backend\ABackend;
6365
use OCP\User\Backend\ICheckPasswordBackend;
6466
use OCP\User\Backend\ICountUsersBackend;
@@ -68,7 +70,6 @@
6870
use OCP\User\Backend\IGetRealUIDBackend;
6971
use OCP\User\Backend\ISetDisplayNameBackend;
7072
use OCP\User\Backend\ISetPasswordBackend;
71-
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
7273
use Symfony\Component\EventDispatcher\GenericEvent;
7374

7475
/**
@@ -86,7 +87,7 @@ class Database extends ABackend
8687
/** @var CappedMemoryCache */
8788
private $cache;
8889

89-
/** @var EventDispatcherInterface */
90+
/** @var IEventDispatcher */
9091
private $eventDispatcher;
9192

9293
/** @var IDBConnection */
@@ -98,13 +99,13 @@ class Database extends ABackend
9899
/**
99100
* \OC\User\Database constructor.
100101
*
101-
* @param EventDispatcherInterface $eventDispatcher
102+
* @param IEventDispatcher $eventDispatcher
102103
* @param string $table
103104
*/
104105
public function __construct($eventDispatcher = null, $table = 'users') {
105106
$this->cache = new CappedMemoryCache();
106107
$this->table = $table;
107-
$this->eventDispatcher = $eventDispatcher ? $eventDispatcher : \OC::$server->getEventDispatcher();
108+
$this->eventDispatcher = $eventDispatcher ? $eventDispatcher : \OC::$server->query(IEventDispatcher::class);
108109
}
109110

110111
/**
@@ -130,8 +131,7 @@ public function createUser(string $uid, string $password): bool {
130131
$this->fixDI();
131132

132133
if (!$this->userExists($uid)) {
133-
$event = new GenericEvent($password);
134-
$this->eventDispatcher->dispatch('OCP\PasswordPolicy::validate', $event);
134+
$this->eventDispatcher->dispatchTyped(new ValidatePasswordPolicyEvent($password));
135135

136136
$qb = $this->dbConn->getQueryBuilder();
137137
$qb->insert($this->table)
@@ -199,8 +199,7 @@ public function setPassword(string $uid, string $password): bool {
199199
$this->fixDI();
200200

201201
if ($this->userExists($uid)) {
202-
$event = new GenericEvent($password);
203-
$this->eventDispatcher->dispatch('OCP\PasswordPolicy::validate', $event);
202+
$this->eventDispatcher->dispatchTyped(new ValidatePasswordPolicyEvent($password));
204203

205204
$hasher = \OC::$server->getHasher();
206205
$hashedPassword = $hasher->hash($password);

tests/lib/Share20/ManagerTest.php

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
use OC\Files\Mount\MoveableMount;
2424
use OC\HintException;
2525
use OC\Share20\DefaultShareProvider;
26+
use OCP\EventDispatcher\Event;
2627
use OCP\Files\File;
2728
use OCP\Files\Folder;
2829
use OCP\Files\IRootFolder;
@@ -36,6 +37,7 @@
3637
use OCP\IUserManager;
3738
use OCP\L10N\IFactory;
3839
use OCP\Mail\IMailer;
40+
use OCP\Security\Events\ValidatePasswordPolicyEvent;
3941
use OCP\Share\Exceptions\ShareNotFound;
4042
use OCP\Share\IProviderFactory;
4143
use OCP\Share\IShare;
@@ -51,6 +53,7 @@
5153
use OCP\Security\IHasher;
5254
use OCP\Files\Mount\IMountManager;
5355
use OCP\IGroupManager;
56+
use PHPUnit\Framework\MockObject\MockObject;
5457
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
5558
use Symfony\Component\EventDispatcher\GenericEvent;
5659

@@ -64,37 +67,37 @@ class ManagerTest extends \Test\TestCase {
6467

6568
/** @var Manager */
6669
protected $manager;
67-
/** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */
70+
/** @var ILogger|MockObject */
6871
protected $logger;
69-
/** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */
72+
/** @var IConfig|MockObject */
7073
protected $config;
71-
/** @var ISecureRandom|\PHPUnit_Framework_MockObject_MockObject */
74+
/** @var ISecureRandom|MockObject */
7275
protected $secureRandom;
73-
/** @var IHasher|\PHPUnit_Framework_MockObject_MockObject */
76+
/** @var IHasher|MockObject */
7477
protected $hasher;
75-
/** @var IShareProvider|\PHPUnit_Framework_MockObject_MockObject */
78+
/** @var IShareProvider|MockObject */
7679
protected $defaultProvider;
77-
/** @var IMountManager|\PHPUnit_Framework_MockObject_MockObject */
80+
/** @var IMountManager|MockObject */
7881
protected $mountManager;
79-
/** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */
82+
/** @var IGroupManager|MockObject */
8083
protected $groupManager;
81-
/** @var IL10N|\PHPUnit_Framework_MockObject_MockObject */
84+
/** @var IL10N|MockObject */
8285
protected $l;
83-
/** @var IFactory|\PHPUnit_Framework_MockObject_MockObject */
86+
/** @var IFactory|MockObject */
8487
protected $l10nFactory;
8588
/** @var DummyFactory */
8689
protected $factory;
87-
/** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
90+
/** @var IUserManager|MockObject */
8891
protected $userManager;
89-
/** @var IRootFolder | \PHPUnit_Framework_MockObject_MockObject */
92+
/** @var IRootFolder | MockObject */
9093
protected $rootFolder;
91-
/** @var EventDispatcherInterface | \PHPUnit_Framework_MockObject_MockObject */
94+
/** @var EventDispatcherInterface | MockObject */
9295
protected $eventDispatcher;
93-
/** @var IMailer|\PHPUnit_Framework_MockObject_MockObject */
96+
/** @var IMailer|MockObject */
9497
protected $mailer;
95-
/** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */
98+
/** @var IURLGenerator|MockObject */
9699
protected $urlGenerator;
97-
/** @var \OC_Defaults|\PHPUnit_Framework_MockObject_MockObject */
100+
/** @var \OC_Defaults|MockObject */
98101
protected $defaults;
99102

100103
public function setUp() {
@@ -495,11 +498,12 @@ public function testVerifyPasswordHook() {
495498
]));
496499

497500
$this->eventDispatcher->expects($this->once())->method('dispatch')
498-
->willReturnCallback(function($eventName, GenericEvent $event) {
499-
$this->assertSame('OCP\PasswordPolicy::validate', $eventName);
500-
$this->assertSame('password', $event->getSubject());
501+
->willReturnCallback(function(Event $event) {
502+
$this->assertInstanceOf(ValidatePasswordPolicyEvent::class, $event);
503+
/** @var ValidatePasswordPolicyEvent $event */
504+
$this->assertSame('password', $event->getPassword());
501505
}
502-
);
506+
);
503507

504508
$result = self::invokePrivate($this->manager, 'verifyPassword', ['password']);
505509
$this->assertNull($result);
@@ -515,12 +519,13 @@ public function testVerifyPasswordHookFails() {
515519
]));
516520

517521
$this->eventDispatcher->expects($this->once())->method('dispatch')
518-
->willReturnCallback(function($eventName, GenericEvent $event) {
519-
$this->assertSame('OCP\PasswordPolicy::validate', $eventName);
520-
$this->assertSame('password', $event->getSubject());
522+
->willReturnCallback(function(Event $event) {
523+
$this->assertInstanceOf(ValidatePasswordPolicyEvent::class, $event);
524+
/** @var ValidatePasswordPolicyEvent $event */
525+
$this->assertSame('password', $event->getPassword());
521526
throw new HintException('message', 'password not accepted');
522527
}
523-
);
528+
);
524529

525530
self::invokePrivate($this->manager, 'verifyPassword', ['password']);
526531
}

tests/lib/User/DatabaseTest.php

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,12 @@
2222

2323
namespace Test\User;
2424
use OC\HintException;
25-
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
26-
use Symfony\Component\EventDispatcher\GenericEvent;
25+
use OCP\EventDispatcher\Event;
26+
use OCP\EventDispatcher\IEventDispatcher;
27+
use OCP\Security\Events\ValidatePasswordPolicyEvent;
28+
use PHPUnit\Framework\MockObject\MockObject;
2729
use OC\User\User;
30+
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
2831

2932
/**
3033
* Class DatabaseTest
@@ -34,7 +37,7 @@
3437
class DatabaseTest extends Backend {
3538
/** @var array */
3639
private $users;
37-
/** @var EventDispatcherInterface|\PHPUnit_Framework_MockObject_MockObject */
40+
/** @var IEventDispatcher|MockObject */
3841
private $eventDispatcher;
3942

4043
public function getUser() {
@@ -46,7 +49,7 @@ public function getUser() {
4649
protected function setUp() {
4750
parent::setUp();
4851

49-
$this->eventDispatcher = $this->createMock(EventDispatcherInterface::class);
52+
$this->eventDispatcher = $this->createMock(IEventDispatcher::class);
5053

5154
$this->backend=new \OC\User\Database($this->eventDispatcher);
5255
}
@@ -65,11 +68,12 @@ public function testVerifyPasswordEvent() {
6568
$user = $this->getUser();
6669
$this->backend->createUser($user, 'pass1');
6770

68-
$this->eventDispatcher->expects($this->once())->method('dispatch')
71+
$this->eventDispatcher->expects($this->once())->method('dispatchTyped')
6972
->willReturnCallback(
70-
function ($eventName, GenericEvent $event) {
71-
$this->assertSame('OCP\PasswordPolicy::validate', $eventName);
72-
$this->assertSame('newpass', $event->getSubject());
73+
function (Event $event) {
74+
$this->assertInstanceOf(ValidatePasswordPolicyEvent::class, $event);
75+
/** @var ValidatePasswordPolicyEvent $event */
76+
$this->assertSame('newpass', $event->getPassword());
7377
}
7478
);
7579

@@ -85,11 +89,12 @@ public function testVerifyPasswordEventFail() {
8589
$user = $this->getUser();
8690
$this->backend->createUser($user, 'pass1');
8791

88-
$this->eventDispatcher->expects($this->once())->method('dispatch')
92+
$this->eventDispatcher->expects($this->once())->method('dispatchTyped')
8993
->willReturnCallback(
90-
function ($eventName, GenericEvent $event) {
91-
$this->assertSame('OCP\PasswordPolicy::validate', $eventName);
92-
$this->assertSame('newpass', $event->getSubject());
94+
function (Event $event) {
95+
$this->assertInstanceOf(ValidatePasswordPolicyEvent::class, $event);
96+
/** @var ValidatePasswordPolicyEvent $event */
97+
$this->assertSame('newpass', $event->getPassword());
9398
throw new HintException('password change failed', 'password change failed');
9499
}
95100
);
@@ -124,8 +129,8 @@ public function testSearch() {
124129
$user2 = $this->getUser();
125130
$this->backend->createUser($user2, 'pass1');
126131

127-
$user1Obj = new User($user1, $this->backend, $this->eventDispatcher);
128-
$user2Obj = new User($user2, $this->backend, $this->eventDispatcher);
132+
$user1Obj = new User($user1, $this->backend, $this->createMock(EventDispatcherInterface::class));
133+
$user2Obj = new User($user2, $this->backend, $this->createMock(EventDispatcherInterface::class));
129134
$emailAddr1 = "$user1@nextcloud.com";
130135
$emailAddr2 = "$user2@nextcloud.com";
131136

0 commit comments

Comments
 (0)