Skip to content

Commit

Permalink
Merge pull request #22781 from nextcloud/backport/22775/stable18
Browse files Browse the repository at this point in the history
[stable18] makes LDAP's group updater dispatch type events
  • Loading branch information
rullzer committed Sep 11, 2020
2 parents 23ca361 + 776ad07 commit 5b8f18e
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 7 deletions.
16 changes: 14 additions & 2 deletions apps/user_ldap/lib/Jobs/UpdateGroups.php
Expand Up @@ -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 {
Expand Down Expand Up @@ -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`
Expand All @@ -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);
Expand Down
1 change: 0 additions & 1 deletion lib/base.php
Expand Up @@ -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 */
Expand Down
4 changes: 0 additions & 4 deletions lib/private/Share20/Hooks.php
Expand Up @@ -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']);
}
}

0 comments on commit 5b8f18e

Please sign in to comment.