From 776ad073c8f97457a4f8dfe4d29358a0dd2394d1 Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Thu, 10 Sep 2020 15:07:34 +0200 Subject: [PATCH] makes LDAP's group updater dispatch type events * fixes group share updates on added users Signed-off-by: Arthur Schiwon --- apps/user_ldap/lib/Jobs/UpdateGroups.php | 16 ++++++++++++++-- lib/base.php | 1 - lib/private/Share20/Hooks.php | 4 ---- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/apps/user_ldap/lib/Jobs/UpdateGroups.php b/apps/user_ldap/lib/Jobs/UpdateGroups.php index ef42f36f54f50..7f68b65f61bb1 100644 --- a/apps/user_ldap/lib/Jobs/UpdateGroups.php +++ b/apps/user_ldap/lib/Jobs/UpdateGroups.php @@ -42,6 +42,9 @@ use OCA\User_LDAP\Mapping\GroupMapping; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\User\Manager; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\Group\Events\UserAddedEvent; +use OCP\Group\Events\UserRemovedEvent; use OCP\ILogger; class UpdateGroups extends \OC\BackgroundJob\TimedJob { @@ -92,6 +95,11 @@ static private function getRefreshInterval() { * @param string[] $groups */ static private function handleKnownGroups($groups) { + /** @var IEventDispatcher $dispatcher */ + $dispatcher = \OC::$server->query(IEventDispatcher::class); + $groupManager = \OC::$server->getGroupManager(); + $userManager = \OC::$server->getUserManager(); + \OCP\Util::writeLog('user_ldap', 'bgJ "updateGroups" – Dealing with known Groups.', ILogger::DEBUG); $query = \OC_DB::prepare(' UPDATE `*PREFIX*ldap_group_members` @@ -103,15 +111,19 @@ static private function handleKnownGroups($groups) { $knownUsers = unserialize(self::$groupsFromDB[$group]['owncloudusers']); $actualUsers = self::getGroupBE()->usersInGroup($group); $hasChanged = false; + + $groupObject = $groupManager->get($group); foreach(array_diff($knownUsers, $actualUsers) as $removedUser) { - \OCP\Util::emitHook('OC_User', 'post_removeFromGroup', array('uid' => $removedUser, 'gid' => $group)); + $userObject = $userManager->get($removedUser); + $dispatcher->dispatchTyped(new UserRemovedEvent($groupObject, $userObject)); \OCP\Util::writeLog('user_ldap', 'bgJ "updateGroups" – "'.$removedUser.'" removed from "'.$group.'".', ILogger::INFO); $hasChanged = true; } foreach(array_diff($actualUsers, $knownUsers) as $addedUser) { - \OCP\Util::emitHook('OC_User', 'post_addToGroup', array('uid' => $addedUser, 'gid' => $group)); + $userObject = $userManager->get($addedUser); + $dispatcher->dispatchTyped(new UserAddedEvent($groupObject, $userObject)); \OCP\Util::writeLog('user_ldap', 'bgJ "updateGroups" – "'.$addedUser.'" added to "'.$group.'".', ILogger::INFO); diff --git a/lib/base.php b/lib/base.php index 92e459e869e86..61db221ac680e 100644 --- a/lib/base.php +++ b/lib/base.php @@ -901,7 +901,6 @@ public static function registerFilesystemHooks() { public static function registerShareHooks() { if (\OC::$server->getSystemConfig()->getValue('installed')) { OC_Hook::connect('OC_User', 'post_deleteUser', Hooks::class, 'post_deleteUser'); - OC_Hook::connect('OC_User', 'post_removeFromGroup', Hooks::class, 'post_removeFromGroupLDAP'); OC_Hook::connect('OC_User', 'post_deleteGroup', Hooks::class, 'post_deleteGroup'); /** @var \OCP\EventDispatcher\IEventDispatcher $dispatcher */ diff --git a/lib/private/Share20/Hooks.php b/lib/private/Share20/Hooks.php index 0e41e20a2cd0f..b596123bbe0cc 100644 --- a/lib/private/Share20/Hooks.php +++ b/lib/private/Share20/Hooks.php @@ -30,8 +30,4 @@ public static function post_deleteUser($arguments) { public static function post_deleteGroup($arguments) { \OC::$server->getShareManager()->groupDeleted($arguments['gid']); } - - public static function post_removeFromGroupLDAP($arguments) { - \OC::$server->getShareManager()->userDeletedFromGroup($arguments['uid'], $arguments['gid']); - } }