]> BookStack Code Mirror - bookstack/commitdiff
Added support for concatenating multiple LDAP attributes in displayName
authorMatthieu Leboeuf <redacted>
Mon, 28 Oct 2024 21:14:30 +0000 (22:14 +0100)
committerGitHub <redacted>
Mon, 28 Oct 2024 21:14:30 +0000 (22:14 +0100)
app/Access/LdapService.php
app/Config/services.php

index 365cb1db0151b9a109bb5802dc4f57a1f8eaabcf..ef6d33f4db146b188495dcbf9732456bcbd74e67 100644 (file)
@@ -71,6 +71,28 @@ class LdapService
         return $users[0];
     }
 
         return $users[0];
     }
 
+    /**
+     * Calculate the display name.
+     */
+    protected function getUserDisplayName(array $displayNameAttr, array $userDetails, string $defaultValue): string
+    {
+        $displayName = [];
+        foreach ($displayNameAttr as $dnAttr) {
+            $dnComponent = $this->getUserResponseProperty($userDetails, $dnAttr, null);
+            if ($dnComponent !== null) {
+                $displayName[] = $dnComponent;
+            }
+        }
+
+        if (count($displayName) == 0) {
+            $displayName = $defaultValue;
+        } else {
+            $displayName = implode(' ', $displayName);
+        }
+
+        return $displayName;
+    }
+
     /**
      * Get the details of a user from LDAP using the given username.
      * User found via configurable user filter.
     /**
      * Get the details of a user from LDAP using the given username.
      * User found via configurable user filter.
@@ -84,9 +106,9 @@ class LdapService
         $displayNameAttr = $this->config['display_name_attribute'];
         $thumbnailAttr = $this->config['thumbnail_attribute'];
 
         $displayNameAttr = $this->config['display_name_attribute'];
         $thumbnailAttr = $this->config['thumbnail_attribute'];
 
-        $user = $this->getUserWithAttributes($userName, array_filter([
-            'cn', 'dn', $idAttr, $emailAttr, $displayNameAttr, $thumbnailAttr,
-        ]));
+        $user = $this->getUserWithAttributes($userName, array_filter(array_merge($displayNameAttr, [
+            'cn', 'dn', $idAttr, $emailAttr, $thumbnailAttr,
+        ])));
 
         if (is_null($user)) {
             return null;
 
         if (is_null($user)) {
             return null;
@@ -95,7 +117,7 @@ class LdapService
         $userCn = $this->getUserResponseProperty($user, 'cn', null);
         $formatted = [
             'uid'   => $this->getUserResponseProperty($user, $idAttr, $user['dn']),
         $userCn = $this->getUserResponseProperty($user, 'cn', null);
         $formatted = [
             'uid'   => $this->getUserResponseProperty($user, $idAttr, $user['dn']),
-            'name'  => $this->getUserResponseProperty($user, $displayNameAttr, $userCn),
+            'name'  => $this->getUserDisplayName($displayNameAttr, $user, $userCn),
             'dn'    => $user['dn'],
             'email' => $this->getUserResponseProperty($user, $emailAttr, null),
             'avatar' => $thumbnailAttr ? $this->getUserResponseProperty($user, $thumbnailAttr, null) : null,
             'dn'    => $user['dn'],
             'email' => $this->getUserResponseProperty($user, $emailAttr, null),
             'avatar' => $thumbnailAttr ? $this->getUserResponseProperty($user, $thumbnailAttr, null) : null,
index d73458231506cb56cc16ec81d4329709b14dbf95..4e27896870afb67ed19b40f196a00df974428c0e 100644 (file)
@@ -127,7 +127,7 @@ return [
         'version'                => env('LDAP_VERSION', false),
         'id_attribute'           => env('LDAP_ID_ATTRIBUTE', 'uid'),
         'email_attribute'        => env('LDAP_EMAIL_ATTRIBUTE', 'mail'),
         'version'                => env('LDAP_VERSION', false),
         'id_attribute'           => env('LDAP_ID_ATTRIBUTE', 'uid'),
         'email_attribute'        => env('LDAP_EMAIL_ATTRIBUTE', 'mail'),
-        'display_name_attribute' => env('LDAP_DISPLAY_NAME_ATTRIBUTE', 'cn'),
+        'display_name_attribute' => explode('|', env('LDAP_DISPLAY_NAME_ATTRIBUTE', 'cn')),
         'follow_referrals'       => env('LDAP_FOLLOW_REFERRALS', false),
         'user_to_groups'         => env('LDAP_USER_TO_GROUPS', false),
         'group_attribute'        => env('LDAP_GROUP_ATTRIBUTE', 'memberOf'),
         'follow_referrals'       => env('LDAP_FOLLOW_REFERRALS', false),
         'user_to_groups'         => env('LDAP_USER_TO_GROUPS', false),
         'group_attribute'        => env('LDAP_GROUP_ATTRIBUTE', 'memberOf'),