Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 8 additions & 12 deletions apps/user_ldap/lib/Access.php
Original file line number Diff line number Diff line change
Expand Up @@ -704,7 +704,7 @@ private function ldap2NextcloudNames(array $ldapObjects, bool $isUsers): array {
continue;
}
$sndName = $ldapObject[$sndAttribute][0] ?? '';
$this->cacheUserDisplayName($ncName, $nameByLDAP, $sndName);
$this->applyUserDisplayName($ncName, $nameByLDAP, $sndName);
} elseif ($nameByLDAP !== null) {
$this->cacheGroupDisplayName($ncName, $nameByLDAP);
}
Expand Down Expand Up @@ -752,20 +752,16 @@ public function cacheGroupExists(string $gid): void {
$this->connection->writeToCache('groupExists' . $gid, true);
}

/**
* caches the user display name
*
* @param string $ocName the internal Nextcloud username
* @param string $displayName the display name
* @param string $displayName2 the second display name
* @throws \Exception
*/
public function cacheUserDisplayName(string $ocName, string $displayName, string $displayName2 = ''): void {
$user = $this->userManager->get($ocName);
public function applyUserDisplayName(string $uid, string $displayName, string $displayName2 = ''): void {
$user = $this->userManager->get($uid);
if ($user === null) {
return;
}
$displayName = $user->composeAndStoreDisplayName($displayName, $displayName2);
$composedDisplayName = $user->composeAndStoreDisplayName($displayName, $displayName2);
$this->cacheUserDisplayName($uid, $composedDisplayName);
}

public function cacheUserDisplayName(string $ocName, string $displayName): void {
$cacheKeyTrunk = 'getDisplayName';
$this->connection->writeToCache($cacheKeyTrunk . $ocName, $displayName);
}
Expand Down
15 changes: 8 additions & 7 deletions apps/user_ldap/lib/User/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -113,12 +113,8 @@ public function processAttributes(array $ldapEntry): void {
$displayName2 = (string)$ldapEntry[$attr][0];
}
if ($displayName !== '') {
$this->composeAndStoreDisplayName($displayName, $displayName2);
$this->access->cacheUserDisplayName(
$this->getUsername(),
$displayName,
$displayName2
);
$composedDisplayName = $this->composeAndStoreDisplayName($displayName, $displayName2);
$this->access->cacheUserDisplayName($this->getUsername(), $composedDisplayName);
}
unset($attr);

Expand All @@ -128,7 +124,8 @@ public function processAttributes(array $ldapEntry): void {
$attr = strtolower($this->connection->ldapEmailAttribute);
if (isset($ldapEntry[$attr])) {
$mailValue = 0;
for ($x = 0; $x < count($ldapEntry[$attr]); $x++) {
$emailValues = count($ldapEntry[$attr]);
for ($x = 0; $x < $emailValues; $x++) {
if (filter_var($ldapEntry[$attr][$x], FILTER_VALIDATE_EMAIL)) {
$mailValue = $x;
break;
Expand Down Expand Up @@ -451,6 +448,10 @@ public function composeAndStoreDisplayName(string $displayName, string $displayN
return $displayName;
}

public function fetchStoredDisplayName(): string {
return $this->config->getUserValue($this->uid, 'user_ldap', 'displayName', '');
}

/**
* Stores the LDAP Username in the Database
*/
Expand Down
64 changes: 42 additions & 22 deletions apps/user_ldap/lib/User_LDAP.php
Original file line number Diff line number Diff line change
Expand Up @@ -409,26 +409,21 @@ public function getHome($uid) {
return $path;
}

/**
* get display name of the user
* @param string $uid user ID of the user
* @return string|false display name
*/
public function getDisplayName($uid) {
if ($this->userPluginManager->implementsActions(Backend::GET_DISPLAYNAME)) {
return $this->userPluginManager->getDisplayName($uid);
}

if (!$this->userExists($uid)) {
return false;
private function getDisplayNameFromDatabase(string $uid): ?string {
$user = $this->access->userManager->get($uid);
if ($user instanceof User) {
$displayName = $user->fetchStoredDisplayName();
if ($displayName !== '') {
return $displayName;
}
}

$cacheKey = 'getDisplayName' . $uid;
if (!is_null($displayName = $this->access->connection->getFromCache($cacheKey))) {
return $displayName;
if ($user instanceof OfflineUser) {
return $user->getDisplayName();
}
return null;
}

//Check whether the display name is configured to have a 2nd feature
private function getDisplayNameFromLdap(string $uid): string {
$additionalAttribute = $this->access->connection->ldapUserDisplayName2;
$displayName2 = '';
if ($additionalAttribute !== '') {
Expand All @@ -450,16 +445,40 @@ public function getDisplayName($uid) {

$user = $this->access->userManager->get($uid);
if ($user instanceof User) {
$displayName = $user->composeAndStoreDisplayName($displayName, (string)$displayName2);
$this->access->connection->writeToCache($cacheKey, $displayName);
return $user->composeAndStoreDisplayName($displayName, (string)$displayName2);
}
if ($user instanceof OfflineUser) {
$displayName = $user->getDisplayName();
return $user->getDisplayName();
}
}

return '';
}

public function getDisplayName($uid): string {
if ($this->userPluginManager->implementsActions(Backend::GET_DISPLAYNAME)) {
return $this->userPluginManager->getDisplayName($uid);
}

if (!$this->userExists($uid)) {
return '';
}

$cacheKey = 'getDisplayName' . $uid;
if (!is_null($displayName = $this->access->connection->getFromCache($cacheKey))) {
return $displayName;
}

return null;
if ($displayName = $this->getDisplayNameFromDatabase($uid)) {
$this->access->connection->writeToCache($cacheKey, $displayName);
return $displayName;
}

if ($displayName = $this->getDisplayNameFromLdap($uid)) {
$this->access->connection->writeToCache($cacheKey, $displayName);
}

return $displayName;
}

/**
Expand All @@ -483,7 +502,8 @@ public function setDisplayName($uid, $displayName) {
* @param string $search
* @param int|null $limit
* @param int|null $offset
* @return array an array of all displayNames (value) and the corresponding uids (key)
* @return array an array of all displayNames (value) and the corresponding
* uids (key)
*/
public function getDisplayNames($search = '', $limit = null, $offset = null) {
$cacheKey = 'getDisplayNames-' . $search . '-' . $limit . '-' . $offset;
Expand Down
6 changes: 0 additions & 6 deletions build/psalm-baseline.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1101,16 +1101,10 @@
</InvalidDocblock>
</file>
<file src="apps/user_ldap/lib/User_LDAP.php">
<ImplementedReturnTypeMismatch>
<code><![CDATA[string|false]]></code>
</ImplementedReturnTypeMismatch>
<MoreSpecificImplementedParamType>
<code><![CDATA[$limit]]></code>
<code><![CDATA[$offset]]></code>
</MoreSpecificImplementedParamType>
<NullableReturnStatement>
<code><![CDATA[null]]></code>
</NullableReturnStatement>
<RedundantCondition>
<code><![CDATA[$displayName && (count($displayName) > 0)]]></code>
<code><![CDATA[is_string($dn)]]></code>
Expand Down
Loading