Commit ffc7fb210e95cadc964b23bbba3423683f4c6775

Authored by Etienne Pallier
1 parent d52d9e45
Exists in master and in 2 other branches dev, dev-IRAP

Bugfix QrCode : http et https bien gérés

Aussi: Retour exception si table configurations vide
README.md
... ... @@ -53,13 +53,12 @@ Logiciel testé et validé sur les configurations suivantes :
53 53  
54 54 VERSION ACTUELLE
55 55  
56   -Date: 21/05/2019
57   -Version: 2.12.20
  56 +Date: 23/05/2019
  57 +Version: 2.12.21
58 58 Author: EP
59 59 Commentaire:
60   - Bugfix actions sur pdf interdites
61   - Simplifications vues materiels/view et index
62   -
  60 + Bugfix QrCode : http et https bien gérés
  61 + Retour exception si table configurations vide
63 62  
64 63 IMPORTANT :
65 64 - Pour connaitre la version actuelle, taper "./VERSION"
... ... @@ -95,10 +94,11 @@ La liste ci-dessous n'est plus à jour, elle est désormais en ligne ici : https
95 94  
96 95 -----------------------------------------------------------------------------------------------------------
97 96  
98   -21/05/2019 Version: 2.12.18-19 (EP)
99   - Bugfix affichage boutons vue matériel (parfois 2e ligne chevauchait 1ère ligne)
100   - (Enorme) Simplification des vues (toujours en cours)
101 97  
  98 +21/05/2019 Version: 2.12.18-20 (EP)
  99 + Bugfix affichage boutons vue matériel (parfois 2e ligne chevauchait 1ère ligne)
  100 + (Enorme) Simplification des vues materiels/view et index (toujours en cours)
  101 + Bugfix actions sur pdf interdites
102 102  
103 103 17/05/2019 Version: 2.12.15-17 (EP)
104 104 Bugfix modif matos: on ne doit plus pouvoir modifier un materiel validé (ou plus) => il faut le dé-valider avant !
... ...
src/Controller/AppController.php
... ... @@ -390,6 +390,8 @@ class AppController extends Controller
390 390 ->first();
391 391 */
392 392 $this->confLabinvent = TableRegistry::getTableLocator()->get('Configurations')->find()->first();
  393 + // (EP 23/5/19) Exception si la config est vide, inutile d'aller plus loin !
  394 + if (is_null($this->confLabinvent)) throw new \Exception("EXCEPTION: La table 'configurations' de la base de données est vide");
393 395 }
394 396  
395 397 /**
... ...
src/Model/Table/LdapConnectionsTable.php
... ... @@ -10,6 +10,11 @@ use Cake\Core\Exception\Exception;
10 10 class LdapConnectionsTable extends AppTable
11 11 {
12 12  
  13 + // (EP 23/5/19) Optimisation:
  14 + // Les utilisateurs sont stockés dans un cache (BD)
  15 + // pour limiter les accès au LDAP
  16 + private $LDAP_CACHED = FALSE;
  17 +
13 18 public $useTable = false;
14 19  
15 20 private $host;
... ... @@ -392,12 +397,26 @@ class LdapConnectionsTable extends AppTable
392 397 }
393 398  
394 399  
395   -
396   - // TODO: implement
397 400 // REAL LDAP only
398   - private function checkAndFetchUserFromDB($user_login, $user_password) {
  401 + //TODO:
  402 + private function _formatUserFromDbAsLDAP($user) {
  403 + return $user;
  404 + }
  405 +
  406 + // REAL LDAP only
  407 + private function checkAndFetchLDAPUserFromDB($user_login, $user_password) {
399 408 // Doit aussi return false si ce user_login est "périmé" (sa date "created" est > 2 mois par exemple),
400 409 // ce qui obligera à relire ses données dans le LDAP et donc se mettre à jour
  410 + if (! $this->LDAP_CACHED) return FALSE;
  411 + // Search user in DB
  412 + $user = TableRegistry::getTableLocator()->get('Users')->find()
  413 + ->where([
  414 + 'username' => $user_login
  415 + ])
  416 + ->first();
  417 + if (!is_null($user)) {
  418 + $user = $this->_formatUserFromDbAsLDAP($user);
  419 + }
401 420 // By default, user is not in DB
402 421 return FALSE;
403 422 }
... ... @@ -483,7 +502,7 @@ class LdapConnectionsTable extends AppTable
483 502  
484 503 // TODO: optimisation possible
485 504 // 1) Search user in CACHE (DB)
486   - $user_fetched = $this->checkAndFetchUserFromDB($user_login, $user_password);
  505 + $user_fetched = $this->checkAndFetchLDAPUserFromDB($user_login, $user_password);
487 506 // 2) If not CACHED, search user in LDAP
488 507 if ($user_fetched === FALSE) {
489 508  
... ... @@ -505,6 +524,10 @@ class LdapConnectionsTable extends AppTable
505 524 return $user_fetched[0];
506 525 }
507 526 }
  527 + else {
  528 + debug("user found in DB");
  529 + debug($user_fetched);
  530 + }
508 531 //return $user_fetched; // Noter que $user_fetched peut etre egal a FALSE (si pas trouvé)
509 532 }
510 533  
... ... @@ -514,8 +537,8 @@ class LdapConnectionsTable extends AppTable
514 537 //debug($this->baseDn);
515 538 $user = $this->getFakeLdapUser($user_login);
516 539 // debug($user);
517   - if ($user === false)
518   - return FALSE;
  540 + //if ($user === false) return FALSE;
  541 + if ($user !== false) {
519 542 // $this->authenticationType peut valoir "uid" ou "cn"... (par défaut "uid" pour le fake ldap, à confirmer...)
520 543 // if ($user['uid'][0] == "_NouvelUtilisateur_username" && $user['userpassword'][0] == "_NouvelUtilisateur_password") return $user;
521 544 // if ($user[$this->authenticationType][0] == "_NouvelUtilisateur_username" && $user['userpassword'][0] == "_NouvelUtilisateur_password") return $user;
... ... @@ -524,6 +547,7 @@ class LdapConnectionsTable extends AppTable
524 547 if ( (new DefaultPasswordHasher())->check($user_password,$user['userpassword'][0]) )
525 548 return $user;
526 549 // if ($user != false && $user['userpassword'][0] == $password) {
  550 + }
527 551 }
528 552  
529 553 }
... ...
src/Template/Materiels/view.ctp
... ... @@ -218,7 +218,10 @@ $CAN_PRINT_LABEL = $IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN
218 218 }
219 219  
220 220 // QRCODE (Url)
221   - $this->request->getSession()->write("qrUrl", $this->request->env('SERVER_NAME') . $this->request->env('REQUEST_URI'));
  221 + //debug($this->request->env('REQUEST_SCHEME'));
  222 + $qrCodeUrl = $this->request->env('REQUEST_SCHEME').'://' . $this->request->env('SERVER_NAME') . $this->request->env('REQUEST_URI');
  223 +
  224 + $this->request->getSession()->write("qrUrl", $qrCodeUrl);
222 225 $this->requestAction('/QrCodes/creer/');
223 226 echo $this->Html->image('qrcodes/' . $this->request->getSession()
224 227 ->read("filename"), [
... ...
tests/TestCase/Controller/MaterielsControllerTest.php
... ... @@ -10,12 +10,17 @@ use Cake\Core\Configure;
10 10 use App\Controller\AppController;
11 11 use phpDocumentor\Reflection\Types\Boolean;
12 12  
  13 +
  14 +
  15 +
13 16 /**
14 17 * App\Controller\MaterielsController Test Case
15 18 */
16 19 class MaterielsControllerTest extends General {
17 20 //class MaterielsControllerTest extends IntegrationTestCase {
18 21  
  22 + // Si DEBUG, affiche plus d'infos
  23 + private $DEBUG=FALSE;
19 24  
20 25 /**
21 26 * Fixtures
... ... @@ -686,8 +691,10 @@ class MaterielsControllerTest extends General {
686 691 // Called by testMatCopy() just above
687 692 private function _testMatCopy($testnum, $COPIED, $role, $id, array $materiel_new_data=[], $num_inventaire=NULL) {
688 693 //debug("_testMatCopy numéro ".$testnum);
689   - echo("\n");
690   - echo("_testMatCopy (with role ".$role.") numéro ".$testnum." :");
  694 + if ($this->DEBUG) {
  695 + echo("\n");
  696 + echo("_testMatCopy (with role ".$role.") numéro ".$testnum." :");
  697 + }
691 698 $designation = isset($materiel_new_data->designation) ? $materiel_new_data->designation : 'matos 1 USER (C)';
692 699  
693 700 // AVANT add
... ...