From 26b2f9254cf83dbc075e5da24e69a52e1d156f53 Mon Sep 17 00:00:00 2001 From: Carl Schwan Date: Thu, 9 Dec 2021 11:51:13 +0100 Subject: [PATCH] Unify a bit the types of the fetcher Now it will only accept a string as parameter instead of either a string (DN) or a array (complete record). Signed-off-by: Carl Schwan --- apps/user_ldap/lib/Group_LDAP.php | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/apps/user_ldap/lib/Group_LDAP.php b/apps/user_ldap/lib/Group_LDAP.php index 33da6261b9fb3..f4ccfe3430455 100644 --- a/apps/user_ldap/lib/Group_LDAP.php +++ b/apps/user_ldap/lib/Group_LDAP.php @@ -56,7 +56,7 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I /** @var string[][] $cachedGroupMembers array of users with gid as key */ protected $cachedGroupMembers; - /** @var string[] $cachedGroupsByMember array of groups with uid as key */ + /** @var string[][] $cachedGroupsByMember array of groups with uid as key */ protected $cachedGroupsByMember; /** @var string[] $cachedNestedGroups array of groups with gid (DN) as key */ protected $cachedNestedGroups; @@ -304,7 +304,7 @@ private function _groupMembers(string $dnGroup, ?array &$seen = null): array { $rawMemberReads[$dnGroup] = $members; } if (is_array($members)) { - $fetcher = function ($memberDN) use (&$seen) { + $fetcher = function (string $memberDN) use (&$seen) { return $this->_groupMembers($memberDN, $seen); }; $allMembers = $this->walkNestedGroupsReturnDNs($dnGroup, $fetcher, $members, $seen); @@ -342,7 +342,7 @@ private function _getGroupDNsFromMemberOf(string $dn): array { return []; } - $fetcher = function ($groupDN) { + $fetcher = function (string $groupDN) { if (isset($this->cachedNestedGroups[$groupDN])) { $nestedGroups = $this->cachedNestedGroups[$groupDN]; } else { @@ -362,7 +362,7 @@ private function _getGroupDNsFromMemberOf(string $dn): array { /** * @psalm-param list}|string> $list * @psalm-param array $seen List of DN that have already been processed. - * @param Closure(string) $fetcher + * @psalm-param Closure(string) $fetcher */ private function processListFromWalkingNestedGroups(array &$list, array &$seen, string $dn, Closure $fetcher): void { while ($record = array_shift($list)) { @@ -375,7 +375,7 @@ private function processListFromWalkingNestedGroups(array &$list, array &$seen, $cacheKey = 'walkNestedGroups_' . $recordDN; $fetched = $this->access->connection->getFromCache($cacheKey); if ($fetched === null) { - $fetched = $fetcher($record); + $fetched = $fetcher($recordDN); $fetched = $this->access->connection->writeToCache($cacheKey, $fetched); } $list = array_merge($list, $fetched); @@ -388,7 +388,7 @@ private function processListFromWalkingNestedGroups(array &$list, array &$seen, /** * @psalm-param list}|string> $list * @psalm-param array $seen List of DN that have already been processed. - * @param Closure(string) $fetcher + * @psalm-param Closure(string) $fetcher */ private function walkNestedGroupsReturnDNs(string $dn, Closure $fetcher, array $list, array &$seen = []): array { $nesting = (int)$this->access->connection->ldapNestedGroups; @@ -404,15 +404,15 @@ private function walkNestedGroupsReturnDNs(string $dn, Closure $fetcher, array $ /** * @psalm-param list}> $list * @psalm-param array $seen List of DN that have already been processed. + * @psalm-param Closure(string) $fetcher * @return array[] An array of records - * @param Closure(string) $fetcher */ private function walkNestedGroupsReturnRecords(string $dn, Closure $fetcher, array $list, array &$seen = []): array { $nesting = (int)$this->access->connection->ldapNestedGroups; if ($nesting !== 1) { // the keys are numeric, but should hold the DN - return array_reduce($list, function ($transformed, $record) use ($dn) { + return array_reduce($list, function (array $transformed, array $record) use ($dn) { if ($record['dn'][0] != $dn) { $transformed[$record['dn'][0]] = $record; } @@ -893,10 +893,7 @@ private function getGroupsByMember(string $dn, array &$seen = null): array { $groups = $this->access->fetchListOfGroups($filter, [strtolower($this->access->connection->ldapGroupMemberAssocAttr), $this->access->connection->ldapGroupDisplayName, 'dn']); if (is_array($groups)) { - $fetcher = function ($dn) use (&$seen) { - if (is_array($dn) && isset($dn['dn'][0])) { - $dn = $dn['dn'][0]; - } + $fetcher = function (string $dn) use (&$seen) { return $this->getGroupsByMember($dn, $seen); }; @@ -1215,7 +1212,7 @@ protected function filterValidGroups(array $listOfGroups): array { $validGroupDNs = []; foreach ($listOfGroups as $key => $item) { $dn = is_string($item) ? $item : $item['dn'][0]; - if(is_array($item) && !isset($item[$this->access->connection->ldapGroupDisplayName][0])) { + if (is_array($item) && !isset($item[$this->access->connection->ldapGroupDisplayName][0])) { continue; } $name = $item[$this->access->connection->ldapGroupDisplayName][0] ?? null;