Skip to content

Commit 75def24

Browse files
committed
Migrate OC_Group post_removeFromGroup hook to actual event object
Ref #14552 This adds a BeforeUserRemovedEvent to the LDAP backend because it was missing. It's not really before, but we don't have the before state. Signed-off-by: Morris Jobke <hey@morrisjobke.de>
1 parent 09b9f94 commit 75def24

4 files changed

Lines changed: 30 additions & 8 deletions

File tree

apps/user_ldap/lib/Jobs/UpdateGroups.php

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@
4343
use OCA\User_LDAP\Mapping\GroupMapping;
4444
use OCA\User_LDAP\Mapping\UserMapping;
4545
use OCA\User_LDAP\User\Manager;
46+
use OCP\EventDispatcher\IEventDispatcher;
47+
use OCP\Group\Events\BeforeUserRemovedEvent;
48+
use OCP\Group\Events\UserRemovedEvent;
4649
use OCP\ILogger;
4750

4851
class UpdateGroups extends \OC\BackgroundJob\TimedJob {
@@ -93,6 +96,10 @@ private static function getRefreshInterval() {
9396
* @param string[] $groups
9497
*/
9598
private static function handleKnownGroups($groups) {
99+
$dispatcher = \OC::$server->query(IEventDispatcher::class);
100+
$groupManager = \OC::$server->getGroupManager();
101+
$userManager = \OC::$server->getUserManager();
102+
96103
\OCP\Util::writeLog('user_ldap', 'bgJ "updateGroups" – Dealing with known Groups.', ILogger::DEBUG);
97104
$query = \OC_DB::prepare('
98105
UPDATE `*PREFIX*ldap_group_members`
@@ -104,8 +111,12 @@ private static function handleKnownGroups($groups) {
104111
$knownUsers = unserialize(self::$groupsFromDB[$group]['owncloudusers']);
105112
$actualUsers = self::getGroupBE()->usersInGroup($group);
106113
$hasChanged = false;
114+
115+
$groupObject = $groupManager->get($group);
107116
foreach (array_diff($knownUsers, $actualUsers) as $removedUser) {
108-
\OCP\Util::emitHook('OC_User', 'post_removeFromGroup', ['uid' => $removedUser, 'gid' => $group]);
117+
$userObject = $userManager->get($removedUser);
118+
$dispatcher->dispatchTyped(new BeforeUserRemovedEvent($groupObject, $userObject)); // fake the before event
119+
$dispatcher->dispatchTyped(new UserRemovedEvent($groupObject, $userObject));
109120
\OCP\Util::writeLog('user_ldap',
110121
'bgJ "updateGroups" – "'.$removedUser.'" removed from "'.$group.'".',
111122
ILogger::INFO);

lib/base.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@
6161
*
6262
*/
6363

64+
use OCP\EventDispatcher\IEventDispatcher;
65+
use OCP\Group\Events\UserRemovedEvent;
6466
use OCP\ILogger;
6567
use OCP\Share;
6668
use OC\Encryption\HookManager;
@@ -902,8 +904,13 @@ public static function registerFilesystemHooks() {
902904
*/
903905
public static function registerShareHooks() {
904906
if (\OC::$server->getSystemConfig()->getValue('installed')) {
907+
/* @var IEventDispatcher $eventDispatcher */
908+
$dispatcher = \OC::$server->query(IEventDispatcher::class);
909+
905910
OC_Hook::connect('OC_User', 'post_deleteUser', Hooks::class, 'post_deleteUser');
906-
OC_Hook::connect('OC_User', 'post_removeFromGroup', Hooks::class, 'post_removeFromGroup');
911+
$dispatcher->addListener(UserRemovedEvent::class, function(UserRemovedEvent $event) {
912+
\OC::$server->getShareManager()->userDeletedFromGroup($event->getUser()->getUID(), $event->getGroup()->getGID());
913+
});
907914
OC_Hook::connect('OC_User', 'post_deleteGroup', Hooks::class, 'post_deleteGroup');
908915
}
909916
}

lib/private/Share20/Hooks.php

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,4 @@ public static function post_deleteUser($arguments) {
3030
public static function post_deleteGroup($arguments) {
3131
\OC::$server->getShareManager()->groupDeleted($arguments['gid']);
3232
}
33-
34-
public static function post_removeFromGroup($arguments) {
35-
\OC::$server->getShareManager()->userDeletedFromGroup($arguments['uid'], $arguments['gid']);
36-
}
3733
}

lib/private/User/User.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@
4141
use OC\Files\Cache\Storage;
4242
use OC\Hooks\Emitter;
4343
use OC_Helper;
44+
use OCP\EventDispatcher\IEventDispatcher;
45+
use OCP\Group\Events\BeforeUserRemovedEvent;
46+
use OCP\Group\Events\UserRemovedEvent;
4447
use OCP\IAvatarManager;
4548
use OCP\IConfig;
4649
use OCP\IImage;
@@ -63,6 +66,9 @@ class User implements IUser {
6366
/** @var EventDispatcherInterface */
6467
private $dispatcher;
6568

69+
/** @var IEventDispatcher */
70+
private $newDispatcher;
71+
6672
/** @var bool */
6773
private $enabled;
6874

@@ -100,6 +106,8 @@ public function __construct(string $uid, ?UserInterface $backend, EventDispatche
100106
if (is_null($this->urlGenerator)) {
101107
$this->urlGenerator = \OC::$server->getURLGenerator();
102108
}
109+
// TODO: inject
110+
$this->newDispatcher = \OC::$server->query(IEventDispatcher::class);
103111
}
104112

105113
/**
@@ -219,9 +227,9 @@ public function delete() {
219227
foreach ($groupManager->getUserGroupIds($this) as $groupId) {
220228
$group = $groupManager->get($groupId);
221229
if ($group) {
222-
\OC_Hook::emit("OC_Group", "pre_removeFromGroup", ["run" => true, "uid" => $this->uid, "gid" => $groupId]);
230+
$this->newDispatcher->dispatchTyped(new BeforeUserRemovedEvent($group, $this));
223231
$group->removeUser($this);
224-
\OC_Hook::emit("OC_User", "post_removeFromGroup", ["uid" => $this->uid, "gid" => $groupId]);
232+
$this->newDispatcher->dispatchTyped(new UserRemovedEvent($group, $this));
225233
}
226234
}
227235
// Delete the user's keys in preferences

0 commit comments

Comments
 (0)