From 401d5c6160c9cbff1cd00205d2903ad7ff24cf29 Mon Sep 17 00:00:00 2001 From: Patrick Barroca <pbarroca@afi-sa.fr> Date: Tue, 5 Feb 2019 16:05:53 +0100 Subject: [PATCH] hotline #86381 : fix Nanook authentication through ILS only --- VERSIONS_HOTLINE/86381 | 1 + .../Class/WebService/SIGB/Nanook/Service.php | 21 ++++++++++++-- .../Class/WebService/SIGB/NanookTest.php | 29 +++++++++++++++++++ 3 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 VERSIONS_HOTLINE/86381 diff --git a/VERSIONS_HOTLINE/86381 b/VERSIONS_HOTLINE/86381 new file mode 100644 index 00000000000..59c5a5449e9 --- /dev/null +++ b/VERSIONS_HOTLINE/86381 @@ -0,0 +1 @@ + - ticket #86381 : SIGB Nanook : Correction de l'authentification par SIGB uniquement \ No newline at end of file diff --git a/library/Class/WebService/SIGB/Nanook/Service.php b/library/Class/WebService/SIGB/Nanook/Service.php index d474d356220..616186c94f5 100644 --- a/library/Class/WebService/SIGB/Nanook/Service.php +++ b/library/Class/WebService/SIGB/Nanook/Service.php @@ -107,19 +107,34 @@ class Class_Webservice_SIGB_Nanook_Service extends Class_WebService_SIGB_Abstrac * @return Class_WebService_SIGB_Emprunteur */ public function getEmprunteur($user) { - if (!$this->ilsdiAuthenticatePatron($user)) + if (!$user + || (!$patron_id = $this->_patronIdFromUser($user))) return Class_WebService_SIGB_Emprunteur::nullInstance(); - $emprunteur= $this->ilsdiGetPatronInfo(['patronId' => $user->getIdSigb()], - Class_WebService_SIGB_Nanook_PatronInfoReader::newInstance()); + + $emprunteur = $this->ilsdiGetPatronInfo(['patronId' => $user->getIdSigb()], + Class_WebService_SIGB_Nanook_PatronInfoReader::newInstance()); if (!$emprunteur->getCodeBarres()) $emprunteur->setCodeBarres($user->getLogin()); $emprunteur->setPassword($user->getPassword()); + return $emprunteur; } + protected function _patronIdFromUser($user) { + $patron_id = Class_Users::isLogged($user) + ? $user->getIdSigb() + : ''; + + if (!$patron_id && $this->ilsdiAuthenticatePatron($user)) + $patron_id = $user->getIdSigb(); + + return $patron_id; + } + + public function getUserAnnexe($user) { return $user->id_site; } diff --git a/tests/library/Class/WebService/SIGB/NanookTest.php b/tests/library/Class/WebService/SIGB/NanookTest.php index be53739a3d0..53716110fef 100644 --- a/tests/library/Class/WebService/SIGB/NanookTest.php +++ b/tests/library/Class/WebService/SIGB/NanookTest.php @@ -888,6 +888,35 @@ class NanookGetEmprunteurAuthenticateTest extends NanookTestCase { $this->assertEmpty($emprunteur->getPassword()); } + + + /** @test */ + public function withLoginThroughSigbOnlyAndAlreadyLoggedShouldNotAuthenticatePatron() { + $this->_mock_web_client + ->whenCalled('open_url') + ->with('http://localhost:8080/afi_Nanook/ilsdi/service/GetPatronInfo/patronId/999') + ->answers(NanookFixtures::xmlGetPatronError()); + + Class_AdminVar::set('LOGIN_THROUGH_SIGB_ONLY', '1'); + + $user = $this->fixture('Class_Users', + ['id' => 98734, + 'id_site' => 3, + 'idabon' => 'A-00001', + 'id_sigb' => '999', + 'login' => '90175000410218', + 'password' => '', + 'role_level' => ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB, + ]); + + ZendAfi_Auth::getInstance()->logUser($user); + + $emprunteur = $this->_service->getEmprunteur($user); + + $this->assertTrue($this->_mock_web_client + ->methodHasBeenCalledWithParams('open_url', + ['http://localhost:8080/afi_Nanook/ilsdi/service/GetPatronInfo/patronId/999'])); + } } -- GitLab