Skip to content

Commit e554f7e

Browse files
committed
fix: Move event listener outside of controllers
Signed-off-by: Carl Schwan <carlschwan@kde.org>
1 parent f8e376c commit e554f7e

4 files changed

Lines changed: 57 additions & 76 deletions

File tree

lib/private/Authentication/LoginCredentials/Store.php

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,29 +15,37 @@
1515
use OCP\Authentication\Exceptions\InvalidTokenException;
1616
use OCP\Authentication\LoginCredentials\ICredentials;
1717
use OCP\Authentication\LoginCredentials\IStore;
18-
use OCP\EventDispatcher\IEventDispatcher;
18+
use OCP\EventDispatcher\Event;
19+
use OCP\EventDispatcher\IEventListener;
1920
use OCP\ISession;
2021
use OCP\Security\ICrypto;
21-
use OCP\Server;
2222
use OCP\Session\Exceptions\SessionNotAvailableException;
2323
use OCP\User\Events\UserLoggedInEvent;
2424
use OCP\User\Events\UserLoggedInWithCookieEvent;
25+
use Override;
2526
use Psr\Log\LoggerInterface;
2627

27-
class Store implements IStore {
28+
/**
29+
* @template-implements IEventListener<UserLoggedInEvent|UserLoggedInWithCookieEvent>
30+
*/
31+
class Store implements IStore, IEventListener {
2832
public function __construct(
2933
private ISession $session,
3034
private LoggerInterface $logger,
3135
private readonly ICrypto $crypto,
3236
private ?IProvider $tokenProvider = null,
3337
) {
34-
Server::get(IEventDispatcher::class)->addListener(UserLoggedInWithCookieEvent::class, function (UserLoggedInWithCookieEvent $event) {
38+
}
39+
40+
#[Override]
41+
public function handle(Event $event): void {
42+
if ($event instanceof UserLoggedInWithCookieEvent) {
3543
$this->authenticate(['run' => true, 'uid' => $event->getUser()->getUID(), 'password' => $event->getPassword()]);
36-
});
44+
}
3745

38-
Server::get(IEventDispatcher::class)->addListener(UserLoggedInEvent::class, function (UserLoggedInEvent $event) {
46+
if ($event instanceof UserLoggedInEvent) {
3947
$this->authenticate(['run' => true, 'uid' => $event->getUser()->getUID(), 'loginName' => $event->getLoginName(), 'password' => $event->getPassword(), 'isTokenLogin' => $event->isTokenLogin()]);
40-
});
48+
}
4149
}
4250

4351
/**
@@ -57,12 +65,7 @@ public function setSession(ISession $session): void {
5765
$this->session = $session;
5866
}
5967

60-
/**
61-
* @since 12
62-
*
63-
* @return ICredentials the login credentials of the current user
64-
* @throws CredentialsUnavailableException
65-
*/
68+
#[Override]
6669
public function getLoginCredentials(): ICredentials {
6770
if ($this->tokenProvider === null) {
6871
throw new CredentialsUnavailableException();
@@ -89,8 +92,7 @@ public function getLoginCredentials(): ICredentials {
8992
}
9093

9194
if ($trySession && $this->session->exists('login_credentials')) {
92-
/** @var array $creds */
93-
$creds = json_decode($this->session->get('login_credentials'), true);
95+
$creds = json_decode($this->session->get('login_credentials'), true, flags: JSON_THROW_ON_ERROR);
9496
if ($creds['password'] !== null) {
9597
try {
9698
$creds['password'] = $this->crypto->decrypt($creds['password']);

lib/private/Server.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
namespace OC;
99

1010
use bantu\IniGetWrapper\IniGetWrapper;
11-
use lib\private\Files\Listeners\UserMountCacheListener;
1211
use OC\Accounts\AccountManager;
1312
use OC\Activity\EventMerger;
1413
use OC\App\AppManager;
@@ -210,6 +209,7 @@
210209
use OCP\Files\Template\ITemplateManager;
211210
use OCP\FilesMetadata\IFilesMetadataManager;
212211
use OCP\FullTextSearch\IFullTextSearchManager;
212+
use OCP\Group\Events\GroupDeletedEvent;
213213
use OCP\Group\ISubAdmin;
214214
use OCP\Http\Client\IClientService;
215215
use OCP\IAppConfig;
@@ -1278,8 +1278,12 @@ private function connectDispatcher(): void {
12781278
$eventDispatcher = $this->get(IEventDispatcher::class);
12791279
$eventDispatcher->addServiceListener(LoginFailed::class, LoginFailedListener::class);
12801280
$eventDispatcher->addServiceListener(PostLoginEvent::class, UserLoggedInListener::class);
1281+
$eventDispatcher->addServiceListener(UserLoggedInEvent::class, Store::class);
1282+
$eventDispatcher->addServiceListener(UserLoggedInWithCookieEvent::class, Store::class);
12811283
$eventDispatcher->addServiceListener(UserChangedEvent::class, UserChangedListener::class);
12821284
$eventDispatcher->addServiceListener(BeforeUserDeletedEvent::class, BeforeUserDeletedListener::class);
1285+
$eventDispatcher->addServiceListener(UserDeletedEvent::class, SubAdmin::class);
1286+
$eventDispatcher->addServiceListener(GroupDeletedEvent::class, SubAdmin::class);
12831287

12841288
FilesMetadataManager::loadListeners($eventDispatcher);
12851289
GenerateBlurhashMetadata::loadListeners($eventDispatcher);

lib/private/SubAdmin.php

Lines changed: 30 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
namespace OC;
99

1010
use OC\Hooks\PublicEmitter;
11+
use OCP\EventDispatcher\Event;
1112
use OCP\EventDispatcher\IEventDispatcher;
13+
use OCP\EventDispatcher\IEventListener;
1214
use OCP\Group\Events\GroupDeletedEvent;
1315
use OCP\Group\Events\SubAdminAddedEvent;
1416
use OCP\Group\Events\SubAdminRemovedEvent;
@@ -19,27 +21,32 @@
1921
use OCP\IUser;
2022
use OCP\IUserManager;
2123
use OCP\User\Events\UserDeletedEvent;
24+
use Override;
2225

23-
class SubAdmin extends PublicEmitter implements ISubAdmin {
26+
/**
27+
* @template-implements IEventListener<UserDeletedEvent|GroupDeletedEvent>
28+
*/
29+
class SubAdmin extends PublicEmitter implements ISubAdmin, IEventListener {
2430
public function __construct(
2531
private IUserManager $userManager,
2632
private IGroupManager $groupManager,
2733
private IDBConnection $dbConn,
2834
private IEventDispatcher $eventDispatcher,
2935
) {
30-
$this->eventDispatcher->addListener(UserDeletedEvent::class, function (UserDeletedEvent $event) {
31-
$this->post_deleteUser($event->getUser());
32-
});
33-
$this->eventDispatcher->addListener(GroupDeletedEvent::class, function (GroupDeletedEvent $event) {
36+
}
37+
38+
#[Override]
39+
public function handle(Event $event): void {
40+
if ($event instanceof GroupDeletedEvent) {
3441
$this->post_deleteGroup($event->getGroup());
35-
});
42+
}
43+
44+
if ($event instanceof UserDeletedEvent) {
45+
$this->post_deleteUser($event->getUser());
46+
}
3647
}
3748

38-
/**
39-
* add a SubAdmin
40-
* @param IUser $user user to be SubAdmin
41-
* @param IGroup $group group $user becomes subadmin of
42-
*/
49+
#[Override]
4350
public function createSubAdmin(IUser $user, IGroup $group): void {
4451
$qb = $this->dbConn->getQueryBuilder();
4552

@@ -50,17 +57,10 @@ public function createSubAdmin(IUser $user, IGroup $group): void {
5057
])
5158
->executeStatement();
5259

53-
/** @deprecated 21.0.0 - use type SubAdminAddedEvent instead */
54-
$this->emit('\OC\SubAdmin', 'postCreateSubAdmin', [$user, $group]);
55-
$event = new SubAdminAddedEvent($group, $user);
56-
$this->eventDispatcher->dispatchTyped($event);
60+
$this->eventDispatcher->dispatchTyped(new SubAdminAddedEvent($group, $user));
5761
}
5862

59-
/**
60-
* delete a SubAdmin
61-
* @param IUser $user the user that is the SubAdmin
62-
* @param IGroup $group the group
63-
*/
63+
#[Override]
6464
public function deleteSubAdmin(IUser $user, IGroup $group): void {
6565
$qb = $this->dbConn->getQueryBuilder();
6666

@@ -69,17 +69,10 @@ public function deleteSubAdmin(IUser $user, IGroup $group): void {
6969
->andWhere($qb->expr()->eq('uid', $qb->createNamedParameter($user->getUID())))
7070
->executeStatement();
7171

72-
/** @deprecated 21.0.0 - use type SubAdminRemovedEvent instead */
73-
$this->emit('\OC\SubAdmin', 'postDeleteSubAdmin', [$user, $group]);
74-
$event = new SubAdminRemovedEvent($group, $user);
75-
$this->eventDispatcher->dispatchTyped($event);
72+
$this->eventDispatcher->dispatchTyped(new SubAdminRemovedEvent($group, $user));
7673
}
7774

78-
/**
79-
* get groups of a SubAdmin
80-
* @param IUser $user the SubAdmin
81-
* @return IGroup[]
82-
*/
75+
#[Override]
8376
public function getSubAdminsGroups(IUser $user): array {
8477
$groupIds = $this->getSubAdminsGroupIds($user);
8578

@@ -127,11 +120,7 @@ public function getSubAdminsGroupsName(IUser $user): array {
127120
}, $this->getSubAdminsGroups($user));
128121
}
129122

130-
/**
131-
* get SubAdmins of a group
132-
* @param IGroup $group the group
133-
* @return IUser[]
134-
*/
123+
#[Override]
135124
public function getGroupsSubAdmins(IGroup $group): array {
136125
$qb = $this->dbConn->getQueryBuilder();
137126

@@ -179,12 +168,7 @@ public function getAllSubAdmins(): array {
179168
return $subadmins;
180169
}
181170

182-
/**
183-
* checks if a user is a SubAdmin of a group
184-
* @param IUser $user
185-
* @param IGroup $group
186-
* @return bool
187-
*/
171+
#[Override]
188172
public function isSubAdminOfGroup(IUser $user, IGroup $group): bool {
189173
$qb = $this->dbConn->getQueryBuilder();
190174

@@ -204,11 +188,7 @@ public function isSubAdminOfGroup(IUser $user, IGroup $group): bool {
204188
return $result;
205189
}
206190

207-
/**
208-
* checks if a user is a SubAdmin
209-
* @param IUser $user
210-
* @return bool
211-
*/
191+
#[Override]
212192
public function isSubAdmin(IUser $user): bool {
213193
// Check if the user is already an admin
214194
if ($this->groupManager->isAdmin($user->getUID())) {
@@ -234,12 +214,7 @@ public function isSubAdmin(IUser $user): bool {
234214
return $isSubAdmin !== false;
235215
}
236216

237-
/**
238-
* checks if a user is a accessible by a subadmin
239-
* @param IUser $subadmin
240-
* @param IUser $user
241-
* @return bool
242-
*/
217+
#[Override]
243218
public function isUserAccessible(IUser $subadmin, IUser $user): bool {
244219
if ($subadmin->getUID() === $user->getUID()) {
245220
return true;
@@ -258,10 +233,9 @@ public function isUserAccessible(IUser $subadmin, IUser $user): bool {
258233
}
259234

260235
/**
261-
* delete all SubAdmins by $user
262-
* @param IUser $user
236+
* Delete all SubAdmins by $user
263237
*/
264-
private function post_deleteUser(IUser $user) {
238+
private function post_deleteUser(IUser $user): void {
265239
$qb = $this->dbConn->getQueryBuilder();
266240

267241
$qb->delete('group_admin')
@@ -270,10 +244,9 @@ private function post_deleteUser(IUser $user) {
270244
}
271245

272246
/**
273-
* delete all SubAdmins by $group
274-
* @param IGroup $group
247+
* Delete all SubAdmins by $group
275248
*/
276-
private function post_deleteGroup(IGroup $group) {
249+
private function post_deleteGroup(IGroup $group): void {
277250
$qb = $this->dbConn->getQueryBuilder();
278251

279252
$qb->delete('group_admin')

lib/public/Authentication/LoginCredentials/IStore.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,18 @@
88
*/
99
namespace OCP\Authentication\LoginCredentials;
1010

11+
use OCP\AppFramework\Attribute\Consumable;
1112
use OCP\Authentication\Exceptions\CredentialsUnavailableException;
1213

1314
/**
14-
* @since 12
15+
* @since 12.0.0
1516
*/
17+
#[Consumable(since: '12.0.0')]
1618
interface IStore {
1719
/**
18-
* Get login credentials of the currently logged in user
20+
* Get login credentials of the currently logged-in user.
1921
*
20-
* @since 12
22+
* @since 12.0.0
2123
*
2224
* @throws CredentialsUnavailableException
2325
* @return ICredentials the login credentials of the current user

0 commit comments

Comments
 (0)