Patch for multiple Servers Authentication

Created on 26 October 2018, over 5 years ago
Updated 7 November 2023, 8 months ago

Here's the patch for multiple server authentication


From b9b1ac58625595e6ed656b301c44f901bb973a71 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jose=CC=81=20Hypnotic?= <agency@hypnotic.pt>
Date: Mon, 22 Oct 2018 13:22:25 +0100
Subject: [PATCH] UserProcessor com patch.

---
 .../src/Processor/DrupalUserProcessor.php     | 74 +++++++++++++++++--
 1 file changed, 66 insertions(+), 8 deletions(-)

diff --git a/web/modules/contrib/ldap/ldap_user/src/Processor/DrupalUserProcessor.php b/web/modules/contrib/ldap/ldap_user/src/Processor/DrupalUserProcessor.php
index c5a7ab83..dfcad53b 100644
--- a/web/modules/contrib/ldap/ldap_user/src/Processor/DrupalUserProcessor.php
+++ b/web/modules/contrib/ldap/ldap_user/src/Processor/DrupalUserProcessor.php
@@ -121,7 +121,21 @@ public function provisionDrupalAccount(array $userData) {
 
     // Get an LDAP user from the LDAP server.
     if ($this->config->get('drupalAcctProvisionServer')) {
-      $ldapUser = $this->factory->getUserDataFromServerByIdentifier($userData['name'], $this->config->get('drupalAcctProvisionServer'));
+      // $ldapUser = $this->factory->getUserDataFromServerByIdentifier($userData['name'], $this->config->get('drupalAcctProvisionServer'));
+     
+      $servers = $this->factory->getAllServers();
+      
+      foreach ($servers as $server) {
+        
+        $ldapUser = $this->factory->getUserDataFromServerByIdentifier($userData['name'], $server->id(), 'ldap_user_prov_to_drupal');
+        
+        if (!empty($ldapUser)) {
+          
+          $this->server = $server;
+          
+          break;
+        } 
+      }
     }
     // Still no LDAP user.
     if (!$ldapUser) {
@@ -134,7 +148,7 @@ public function provisionDrupalAccount(array $userData) {
       return FALSE;
     }
 
-    $this->server = $this->factory->getServerByIdEnabled($this->config->get('drupalAcctProvisionServer'));
+    // $this->server = $this->factory->getServerByIdEnabled($this->config->get('drupalAcctProvisionServer'));
 
     // If we don't have an account name already we should set one.
     if (!$this->account->getAccountName()) {
@@ -904,9 +918,24 @@ private function loginLdapEntryProvisioning() {
   private function loginDrupalAccountProvisioning() {
     if (LdapConfiguration::provisionsDrupalAccountsFromLdap()
       && in_array(self::EVENT_SYNC_TO_DRUPAL_USER, array_keys(LdapConfiguration::provisionsDrupalEvents()))) {
-      $ldap_user = $this->factory->getUserDataFromServerByAccount($this->account, $this->config->get('drupalAcctProvisionServer'), 'ldap_user_prov_to_drupal');
+      // $ldap_user = $this->factory->getUserDataFromServerByAccount($this->account, $this->config->get('drupalAcctProvisionServer'), 'ldap_user_prov_to_drupal');
+      
+      $servers = $this->factory->getAllServers();
+      
+      foreach ($servers as $server) {
+        
+        $ldap_user = $this->factory->getUserDataFromServerByAccount($this->account, $server->id(), 'ldap_user_prov_to_drupal');
+        
+        if (!empty($ldap_user)) {
+        
+          $this->server = $server;
+          
+          break;
+        } 
+      }
+      
       if ($ldap_user) {
-        $this->server = $this->factory->getServerById($this->config->get('drupalAcctProvisionServer'));
+        // $this->server = $this->factory->getServerById($this->config->get('drupalAcctProvisionServer'));
         $this->applyAttributesToAccount($ldap_user, self::PROVISION_TO_DRUPAL, [self::EVENT_SYNC_TO_DRUPAL_USER]);
       }
       $this->saveAccount();
@@ -918,9 +947,24 @@ private function loginDrupalAccountProvisioning() {
    */
   private function syncToDrupalUserEvent() {
     if ($this->isUserLdapAssociated($this->account)) {
-      $ldapUser = $this->factory->getUserDataFromServerByAccount($this->account, $this->config->get('drupalAcctProvisionServer'), 'ldap_user_prov_to_drupal');
+      // $ldapUser = $this->factory->getUserDataFromServerByAccount($this->account, $this->config->get('drupalAcctProvisionServer'), 'ldap_user_prov_to_drupal');
+      
+      $servers = $this->factory->getAllServers();
+      
+      foreach ($servers as $server) {
+        
+        $ldapUser = $this->factory->getUserDataFromServerByAccount($this->account, $server->id(), 'ldap_user_prov_to_drupal');
+        
+        if (!empty($ldapUser)) {
+          
+          $this->server = $server;
+          
+          break;
+        } 
+      }
+      
       if ($ldapUser) {
-        $this->server = $this->factory->getServerById($this->config->get('drupalAcctProvisionServer'));
+        // $this->server = $this->factory->getServerById($this->config->get('drupalAcctProvisionServer'));
         $this->applyAttributesToAccount($ldapUser, self::PROVISION_TO_DRUPAL, [self::EVENT_SYNC_TO_DRUPAL_USER]);
       }
       else {
@@ -1119,7 +1163,21 @@ private function syncToDrupalAccount($provisioningEvent = NULL, array $ldapUser
     }
 
     if (!$ldapUser && $this->config->get('drupalAcctProvisionServer')) {
-      $ldapUser = $this->factory->getUserDataFromServerByAccount($this->account, $this->config->get('drupalAcctProvisionServer'), 'ldap_user_prov_to_drupal');
+      // $ldapUser = $this->factory->getUserDataFromServerByAccount($this->account, $this->config->get('drupalAcctProvisionServer'), 'ldap_user_prov_to_drupal');
+
+      $servers = $this->factory->getAllServers();
+      
+      foreach ($servers as $server) {
+        
+        $ldapUser = $this->factory->getUserDataFromServerByAccount($this->account, $server->id(), 'ldap_user_prov_to_drupal');
+        
+        if (!empty($ldapUser)) {
+          
+          $this->server = $server;
+          
+          break;
+        } 
+      }
     }
 
     if (!$ldapUser) {
@@ -1127,7 +1185,7 @@ private function syncToDrupalAccount($provisioningEvent = NULL, array $ldapUser
     }
 
     if ($this->config->get('drupalAcctProvisionServer')) {
-      $this->server = Server::load($this->config->get('drupalAcctProvisionServer'));
+      // $this->server = Server::load($this->config->get('drupalAcctProvisionServer'));
       $this->applyAttributesToAccount($ldapUser, self::PROVISION_TO_DRUPAL, [$provisioningEvent]);
     }
 
-- 
2.17.1

✨ Feature request
Status

Closed: duplicate

Version

4.0

Component

Code

Created by

πŸ‡΅πŸ‡ΉPortugal hypnoticagency

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Comments & Activities

Not all content is available!

It's likely this issue predates Contrib.social: some issue and comment data are missing.

Production build 0.69.0 2024