Commit 35cefa1b59daa8ef27b0167b8e59061497a29f84

Authored by Etienne Pallier
1 parent 967be523
Exists in master and in 1 other branch dev

Bugfix logout après passage en mode ldap

v4.108.8-3.7.9
@@ -315,6 +315,10 @@ Commencer à implémenter le nouveau workflow v5 : @@ -315,6 +315,10 @@ Commencer à implémenter le nouveau workflow v5 :
315 ======= CHANGES ======= 315 ======= CHANGES =======
316 316
317 ------- 317 -------
  318 +16/02/2021 v4.108.8-3.7.9
  319 + - (b) Bugfix logout après passage en mode ldap
  320 +
  321 +-------
318 15/02/2021 v4.108.8-3.7.9 322 15/02/2021 v4.108.8-3.7.9
319 - (b) Bugfix logout après passage en ldap 323 - (b) Bugfix logout après passage en ldap
320 - (b) bugfix fakeldap ($this->authenticationType par defaut = 'uid') 324 - (b) bugfix fakeldap ($this->authenticationType par defaut = 'uid')
@@ -52,8 +52,8 @@ Logiciel testé et validé sur les configurations suivantes : @@ -52,8 +52,8 @@ Logiciel testé et validé sur les configurations suivantes :
52 52
53 -------------------------------------------------------------------------------------------- 53 --------------------------------------------------------------------------------------------
54 54
55 -Date: 15/02/2021  
56 -Version: v4.108.8-3.7.9 55 +Date: 16/02/2021
  56 +Version: v4.108.9-3.7.9
57 57
58 58
59 59
src/Controller/AppController.php
@@ -35,6 +35,8 @@ use Cake\ORM\Entity; @@ -35,6 +35,8 @@ use Cake\ORM\Entity;
35 use Cake\Utility\Inflector; 35 use Cake\Utility\Inflector;
36 36
37 37
  38 +// Idem Model/Table/LdapConnectionsTable et UsersController
  39 +const DEFAULT_AUTH_TYPE = 'uid';
38 40
39 /** 41 /**
40 * Application Controller 42 * Application Controller
@@ -1706,7 +1708,7 @@ class AppController extends Controller @@ -1706,7 +1708,7 @@ class AppController extends Controller
1706 $configuration = $this->confLabinvent; 1708 $configuration = $this->confLabinvent;
1707 //$ldapAuthType = $configuration->ldap_authenticationType; 1709 //$ldapAuthType = $configuration->ldap_authenticationType;
1708 // fakeldap => 'uid' 1710 // fakeldap => 'uid'
1709 - $ldapAuthType = $configuration->ldap_authenticationType ? $configuration->ldap_authenticationType : 'uid'; 1711 + $ldapAuthType = $configuration->ldap_authenticationType ? $configuration->ldap_authenticationType : DEFAULT_AUTH_TYPE;
1710 // Dans les tests, $username est égal à qqch comme : 0 => 'user4_RESP' 1712 // Dans les tests, $username est égal à qqch comme : 0 => 'user4_RESP'
1711 // par défaut, user est DEJA une Entity User => rien à faire 1713 // par défaut, user est DEJA une Entity User => rien à faire
1712 // Si $user non défini ou bien array, il faut rechercher ce user dans la BD pour créer un User entity 1714 // Si $user non défini ou bien array, il faut rechercher ce user dans la BD pour créer un User entity
@@ -1726,7 +1728,7 @@ class AppController extends Controller @@ -1726,7 +1728,7 @@ class AppController extends Controller
1726 * Evite de planter sur $_SESSION['Auth']['User']['samaccountname'] 1728 * Evite de planter sur $_SESSION['Auth']['User']['samaccountname']
1727 * (on continue plutôt de faire $_SESSION['Auth']['User']['uid'], jusqu'à un logout salvateur...) 1729 * (on continue plutôt de faire $_SESSION['Auth']['User']['uid'], jusqu'à un logout salvateur...)
1728 */ 1730 */
1729 - $ldapAuthTypeTemp = isset($_SESSION['Auth']['User'][$ldapAuthType]) ? $ldapAuthType : 'uid'; 1731 + $ldapAuthTypeTemp = isset($_SESSION['Auth']['User'][$ldapAuthType]) ? $ldapAuthType : DEFAULT_AUTH_TYPE;
1730 $username = $_SESSION['Auth']['User'][$ldapAuthTypeTemp]; 1732 $username = $_SESSION['Auth']['User'][$ldapAuthTypeTemp];
1731 } 1733 }
1732 //debug("ldapAuthType is '$ldapAuthType'"); 1734 //debug("ldapAuthType is '$ldapAuthType'");
@@ -2139,6 +2141,7 @@ class AppController extends Controller @@ -2139,6 +2141,7 @@ class AppController extends Controller
2139 $this->user_role = $this->getUserRole(); 2141 $this->user_role = $this->getUserRole();
2140 $profile = self::PROFILES["$this->user_role"]; 2142 $profile = self::PROFILES["$this->user_role"];
2141 $this->myDebug("- priviledgedUser is {$this->u}"); 2143 $this->myDebug("- priviledgedUser is {$this->u}");
  2144 + //debug("- priviledgedUser is {$this->u}"); exit;
2142 $this->myDebug("- user_role is {$this->getUserRole()}", "- profile is: $profile"); 2145 $this->myDebug("- user_role is {$this->getUserRole()}", "- profile is: $profile");
2143 // L'utilisateur connecté (return null si pas connecté) 2146 // L'utilisateur connecté (return null si pas connecté)
2144 // $this->Auth->user('id'); 2147 // $this->Auth->user('id');
src/Controller/UsersController.php
@@ -12,6 +12,10 @@ use Cake\ORM\Entity; @@ -12,6 +12,10 @@ use Cake\ORM\Entity;
12 const SessionTimeoutON = false; 12 const SessionTimeoutON = false;
13 //const SessionTimeoutON = true; 13 //const SessionTimeoutON = true;
14 14
  15 +// Idem Model/Table/LdapConnectionsTable et AppController
  16 +const DEFAULT_AUTH_TYPE = 'uid';
  17 +
  18 +
15 /** 19 /**
16 * Users Controller 20 * Users Controller
17 * 21 *
@@ -279,11 +283,19 @@ class UsersController extends AppController { @@ -279,11 +283,19 @@ class UsersController extends AppController {
279 } 283 }
280 private function _getCurrentUserLoginFromSession($user_infos = null) { 284 private function _getCurrentUserLoginFromSession($user_infos = null) {
281 if (!$user_infos) $user_infos = $this->_getCurrentUserInfosFromSession(); 285 if (!$user_infos) $user_infos = $this->_getCurrentUserInfosFromSession();
  286 + if (! $user_infos) throw new \ErrorException("Pas d'utilisateur défini dans la session !!!");
282 //debug($user_infos); 287 //debug($user_infos);
283 // "Pallier Etienne" 288 // "Pallier Etienne"
284 //$user_login_field_name = $this->authenticationType; 289 //$user_login_field_name = $this->authenticationType;
285 - $user_login_field_name = isset($user_infos['uid']) ? 'uid' : 'samaccountname';  
286 - return $user_infos ? $user_infos[$user_login_field_name][0] : 'user_login'; 290 + //$user_login_field_name = isset($user_infos['uid']) ? 'uid' : 'samaccountname';
  291 + $user_login_field_name = isset($user_infos[DEFAULT_AUTH_TYPE]) ? DEFAULT_AUTH_TYPE : 'samaccountname';
  292 + if (! isset($user_infos[$user_login_field_name])) {
  293 + debug($user_login_field_name);
  294 + debug($user_infos);
  295 + throw new \ErrorException("La variable $user_infos ne contient pas le user login (ni champ 'uid' ni champ 'samaccountname')");
  296 + }
  297 + //return $user_infos ? $user_infos[$user_login_field_name][0] : 'user_login';
  298 + return $user_infos[$user_login_field_name][0];
287 } 299 }
288 private function _getCurrentUserEntityFromSession_ORIG($session_user = null) { 300 private function _getCurrentUserEntityFromSession_ORIG($session_user = null) {
289 $user_fullname = $this->_getCurrentUserFullNameFromSession($session_user); 301 $user_fullname = $this->_getCurrentUserFullNameFromSession($session_user);
src/Model/Entity/User.php
@@ -59,7 +59,8 @@ class User extends Entity @@ -59,7 +59,8 @@ class User extends Entity
59 59
60 // Ce qui s'affiche quand on fait echo $entity (ou echo $this) 60 // Ce qui s'affiche quand on fait echo $entity (ou echo $this)
61 // ATTENTION : nom = "Nom Prénom" 61 // ATTENTION : nom = "Nom Prénom"
62 - public function __toString() { return $this->nom; } 62 + //public function __toString() { return $this->nom; }
  63 + public function __toString() { return $this->nom ? $this->nom : 'Nom Prénom'; }
63 64
64 65
65 // (EP 20200504) - Champs virtuels 66 // (EP 20200504) - Champs virtuels
src/Model/Table/LdapConnectionsTable.php
@@ -7,12 +7,17 @@ use Cake\Auth\DefaultPasswordHasher; @@ -7,12 +7,17 @@ use Cake\Auth\DefaultPasswordHasher;
7 use Cake\Core\Exception\Exception; 7 use Cake\Core\Exception\Exception;
8 use App\Model\Entity\User; 8 use App\Model\Entity\User;
9 9
  10 +// Idem Controller/UsersController et AppController
  11 +const DEFAULT_AUTH_TYPE = 'uid';
  12 +
10 13
11 class LdapConnectionsTable extends AppTable 14 class LdapConnectionsTable extends AppTable
12 { 15 {
13 - 16 +
14 private $DEBUG_MODE; // read from config 17 private $DEBUG_MODE; // read from config
15 18
  19 + private $authenticationType;
  20 +
16 // (EP 23/5/19) Optimisation: 21 // (EP 23/5/19) Optimisation:
17 // Les utilisateurs sont stockés dans un cache (BD) 22 // Les utilisateurs sont stockés dans un cache (BD)
18 // pour limiter les accès au LDAP 23 // pour limiter les accès au LDAP
@@ -28,7 +33,6 @@ class LdapConnectionsTable extends AppTable @@ -28,7 +33,6 @@ class LdapConnectionsTable extends AppTable
28 33
29 private $baseDn; 34 private $baseDn;
30 35
31 - private $authenticationType;  
32 36
33 private $filter; 37 private $filter;
34 38
@@ -195,9 +199,14 @@ class LdapConnectionsTable extends AppTable @@ -195,9 +199,14 @@ class LdapConnectionsTable extends AppTable
195 ], 199 ],
196 // Login ("uid" for IRAP, "samaccountname" for CRAL) 200 // Login ("uid" for IRAP, "samaccountname" for CRAL)
197 //$this->authenticationType => [ 201 //$this->authenticationType => [
  202 + /*
198 'uid' => [ 203 'uid' => [
199 $user['uid'] 204 $user['uid']
200 ], 205 ],
  206 + */
  207 + DEFAULT_AUTH_TYPE => [
  208 + $user[DEFAULT_AUTH_TYPE]
  209 + ],
201 // Pass 210 // Pass
202 'userpassword' => [ 211 'userpassword' => [
203 $user['userpassword'] 212 $user['userpassword']
@@ -365,7 +374,7 @@ class LdapConnectionsTable extends AppTable @@ -365,7 +374,7 @@ class LdapConnectionsTable extends AppTable
365 374
366 // (EP 202102) bugfix, en mode fakldap, on est toujours en 'uid' 375 // (EP 202102) bugfix, en mode fakldap, on est toujours en 'uid'
367 //$this->authenticationType = $config->ldap_authenticationType; 376 //$this->authenticationType = $config->ldap_authenticationType;
368 - $this->authenticationType = 'uid'; 377 + $this->authenticationType = DEFAULT_AUTH_TYPE;
369 if (empty($this->fakeLDAPUsers)) 378 if (empty($this->fakeLDAPUsers))
370 $this->fakeLDAPUsers = $this->_buildFakeLdapUsers(); 379 $this->fakeLDAPUsers = $this->_buildFakeLdapUsers();
371 return true; 380 return true;
@@ -468,7 +477,7 @@ class LdapConnectionsTable extends AppTable @@ -468,7 +477,7 @@ class LdapConnectionsTable extends AppTable
468 debug($user); 477 debug($user);
469 */ 478 */
470 //if ($login == $user[$this->authenticationType][0]) 479 //if ($login == $user[$this->authenticationType][0])
471 - if ($login == $user['uid'][0]) 480 + if ($login == $user[DEFAULT_AUTH_TYPE][0])
472 return $user; 481 return $user;
473 } 482 }
474 return FALSE; 483 return FALSE;
@@ -1110,7 +1119,7 @@ class LdapConnectionsTable extends AppTable @@ -1110,7 +1119,7 @@ class LdapConnectionsTable extends AppTable
1110 // if ($user[$this->authenticationType][0] == "_NouvelUtilisateur_username" && $user['userpassword'][0] == "_NouvelUtilisateur_password") return $user; 1119 // if ($user[$this->authenticationType][0] == "_NouvelUtilisateur_username" && $user['userpassword'][0] == "_NouvelUtilisateur_password") return $user;
1111 // Est-ce le user FAKE LDAP par defaut (_fake_ldap_user_) ? si oui, on le laisse passer 1120 // Est-ce le user FAKE LDAP par defaut (_fake_ldap_user_) ? si oui, on le laisse passer
1112 //if ($user_fetched[$this->authenticationType][0] == $this->_getTheFakeLdapUser()['login'] && $user_fetched['userpassword'][0] == $this->_getTheFakeLdapUser()['pass']) 1121 //if ($user_fetched[$this->authenticationType][0] == $this->_getTheFakeLdapUser()['login'] && $user_fetched['userpassword'][0] == $this->_getTheFakeLdapUser()['pass'])
1113 - if ($user_fetched['uid'][0] == $this->_getTheFakeLdapUser()['login'] && $user_fetched['userpassword'][0] == $this->_getTheFakeLdapUser()['pass']) 1122 + if ($user_fetched[DEFAULT_AUTH_TYPE][0] == $this->_getTheFakeLdapUser()['login'] && $user_fetched['userpassword'][0] == $this->_getTheFakeLdapUser()['pass'])
1114 return $user_fetched; 1123 return $user_fetched;
1115 /* 1124 /*
1116 debug("user_password = ".$user_password); 1125 debug("user_password = ".$user_password);