Commit 40bb0af6 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

[FIX] Meilleure gestion d'erreur en cas de demande d'usurpation d'un compte inexistant

parent 3f5c91a5
Pipeline #10522 passed with stage
in 1 minute and 2 seconds
CHANGELOG CHANGELOG
========= =========
3.2.3
-----
- [FIX] Meilleure gestion d'erreur en cas de demande d'usurpation d'un compte inexistant : retour à l'accueil + message.
3.2.2 3.2.2
----- -----
- L'URL de connexion accepte désormais role=ROLE_ID pour sélectionner automatiquement ce rôle une fois authentifié. - L'URL de connexion accepte désormais role=ROLE_ID pour sélectionner automatiquement ce rôle une fois authentifié.
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
namespace UnicaenAuth\Controller; namespace UnicaenAuth\Controller;
use Exception;
use UnicaenApp\Exception\RuntimeException; use UnicaenApp\Exception\RuntimeException;
use UnicaenApp\Mapper\Ldap\People as LdapPeopleMapper; use UnicaenApp\Mapper\Ldap\People as LdapPeopleMapper;
use UnicaenAuth\Entity\Db\AbstractUser; use UnicaenAuth\Entity\Db\AbstractUser;
...@@ -132,10 +133,19 @@ class UtilisateurController extends AbstractActionController ...@@ -132,10 +133,19 @@ class UtilisateurController extends AbstractActionController
return $this->redirect()->toRoute('home'); return $this->redirect()->toRoute('home');
} }
$utilisateurUsurpe = $this->getUserMapper()->findByUsername($usernameUsurpe); /** @var AbstractUser $utilisateurUsurpe */
if ($utilisateurUsurpe === null) {
$this->flashMessenger()->addErrorMessage(
"La demande d'usurpation du compte '$usernameUsurpe' a échoué car aucun compte utilisateur correspondant " .
"n'a été trouvé."
);
return $this->redirect()->toRoute('home');
}
$sessionIdentity = $this->serviceUserContext->usurperIdentite($usernameUsurpe); $sessionIdentity = $this->serviceUserContext->usurperIdentite($usernameUsurpe);
if ($sessionIdentity !== null) { if ($sessionIdentity !== null) {
// cuisine spéciale si l'utilisateur courant s'est authentifié via Shibboleth // cuisine spéciale si l'utilisateur courant s'est authentifié via Shibboleth
$this->usurperIdentiteShib($usernameUsurpe); $this->usurperIdentiteShib($utilisateurUsurpe);
} }
return $this->redirect()->toRoute('home'); return $this->redirect()->toRoute('home');
...@@ -144,19 +154,15 @@ class UtilisateurController extends AbstractActionController ...@@ -144,19 +154,15 @@ class UtilisateurController extends AbstractActionController
/** /**
* Cuisine spéciale pour l'usurpation si l'utilisateur courant s'est authentifié via Shibboleth. * Cuisine spéciale pour l'usurpation si l'utilisateur courant s'est authentifié via Shibboleth.
* *
* @param string $usernameUsurpe Ex tartempion@unicaen.fr * @param AbstractUser $utilisateurUsurpe Utilisateur à usurper
*/ */
protected function usurperIdentiteShib(string $usernameUsurpe) protected function usurperIdentiteShib(AbstractUser $utilisateurUsurpe)
{ {
$currentIdentityArray = $this->serviceUserContext->getIdentity(); $currentIdentityArray = $this->serviceUserContext->getIdentity();
if (isset($currentIdentityArray['shib']) && $currentIdentityArray['shib'] instanceof ShibUser) { if (isset($currentIdentityArray['shib']) && $currentIdentityArray['shib'] instanceof ShibUser) {
$fromShibUser = $currentIdentityArray['shib']; $fromShibUser = $currentIdentityArray['shib'];
$toUtilisateur = $this->getUserMapper()->findByUsername($usernameUsurpe); /** @var AbstractUser $toUtilisateur */ $this->shibService->activateUsurpation($fromShibUser, $utilisateurUsurpe);
if ($toUtilisateur === null) {
throw new RuntimeException("L'utilisateur '$usernameUsurpe' n'existe pas dans la table des utilisateurs");
}
$this->shibService->activateUsurpation($fromShibUser, $toUtilisateur);
} }
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment