From 5ca5dbac367746b11286f971a77cb0be958f8a39 Mon Sep 17 00:00:00 2001
From: Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr>
Date: Fri, 7 Apr 2023 15:58:25 +0200
Subject: [PATCH] =?UTF-8?q?[FIX]=20Utilisation=20=C3=A0=20tort=20de=20l'op?=
 =?UTF-8?q?tion=20de=20config=20'shib=5Fuser=5Fid=5Fextractor'=20sur=20des?=
 =?UTF-8?q?=20donn=C3=A9es=20d'usurpation/simulation.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 CHANGELOG.md                            | 6 +++++-
 src/UnicaenAuth/Service/ShibService.php | 9 +++++++++
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index dcc9746..0b25d36 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,7 +1,11 @@
 CHANGELOG
 =========
 
-5.0.0
+5.1.1
+-----
+- [FIX] Utilisation à tort de l'option de config 'shib_user_id_extractor' sur des données d'usurpation/simulation.  
+
+5.1.0 = 5.0.0
 -----
 - Migration vers Bootstrap 5 (front-end).
 - Infos à propos de la connexion dans le menu principal : simple bouton 'Connexion' si aucun utilisateur connecté ;
diff --git a/src/UnicaenAuth/Service/ShibService.php b/src/UnicaenAuth/Service/ShibService.php
index 122ef15..70af17e 100644
--- a/src/UnicaenAuth/Service/ShibService.php
+++ b/src/UnicaenAuth/Service/ShibService.php
@@ -496,6 +496,15 @@ EOS;
      */
     private function extractShibUserIdValueForDomainFromShibData(string $domain, array $data): ?string
     {
+        // En cas d'usurpation, le domaine du compte utilisateur usurpé (ex : 'unicaen.fr') peut différer de celui
+        // du compte utilisateur usurpateur (ex : 'univ-lehavre.fr'). Or, la config Shibboleth du module exploitée
+        // ci-dessous n'a de sens que sur des vraies données d'authentification (i.e celle du compte usurpateur),
+        // donc pas la peine d'aller plus loin : on génère un id bidon.
+        // En cas de simulation, on invente les données d'authentification donc c'est la même idée.
+        if ($this->isUsurpationActive() || $this->isSimulationActive()) {
+            return uniqid();
+        }
+
         $config = $this->getShibUserIdExtractorConfigForDomain($domain);
         if (empty($config)) {
             $config = $this->getShibUserIdExtractorDefaultConfig();
-- 
GitLab