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
=========
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
-----
- L'URL de connexion accepte désormais role=ROLE_ID pour sélectionner automatiquement ce rôle une fois authentifié.
......
......@@ -2,6 +2,7 @@
namespace UnicaenAuth\Controller;
use Exception;
use UnicaenApp\Exception\RuntimeException;
use UnicaenApp\Mapper\Ldap\People as LdapPeopleMapper;
use UnicaenAuth\Entity\Db\AbstractUser;
......@@ -132,10 +133,19 @@ class UtilisateurController extends AbstractActionController
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);
if ($sessionIdentity !== null) {
// cuisine spéciale si l'utilisateur courant s'est authentifié via Shibboleth
$this->usurperIdentiteShib($usernameUsurpe);
$this->usurperIdentiteShib($utilisateurUsurpe);
}
return $this->redirect()->toRoute('home');
......@@ -144,19 +154,15 @@ class UtilisateurController extends AbstractActionController
/**
* 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();
if (isset($currentIdentityArray['shib']) && $currentIdentityArray['shib'] instanceof ShibUser) {
$fromShibUser = $currentIdentityArray['shib'];
$toUtilisateur = $this->getUserMapper()->findByUsername($usernameUsurpe); /** @var AbstractUser $toUtilisateur */
if ($toUtilisateur === null) {
throw new RuntimeException("L'utilisateur '$usernameUsurpe' n'existe pas dans la table des utilisateurs");
}
$this->shibService->activateUsurpation($fromShibUser, $toUtilisateur);
$this->shibService->activateUsurpation($fromShibUser, $utilisateurUsurpe);
}
}
......
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