Loading CHANGELOG.md +4 −0 Original line number Diff line number Diff line Loading @@ -37,3 +37,7 @@ Première version officielle sous ZF3. 3.1.2 ----- - Aide de vue UserUsurpationHelper : ajout de la possibilité de dessiner un simple bouton. 3.1.3 ----- - [FIX] Usurpation d'un compte local en BDD src/UnicaenAuth/Controller/UtilisateurController.php +25 −11 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ namespace UnicaenAuth\Controller; use UnicaenApp\Exception\RuntimeException; use UnicaenApp\Mapper\Ldap\People as LdapPeopleMapper; use UnicaenAuth\Entity\Db\AbstractUser; use UnicaenAuth\Entity\Db\User; use UnicaenAuth\Entity\Ldap\People; use UnicaenAuth\Entity\Shibboleth\ShibUser; use UnicaenAuth\Formatter\RoleFormatter; Loading Loading @@ -135,41 +136,54 @@ class UtilisateurController extends AbstractActionController return $this->redirect()->toRoute('home'); } if (isset($currentIdentity['ldap'])) { $username = null; if ($username === null && isset($currentIdentity['db'])) { /** @var AbstractUser $currentIdentity */ $identity = $currentIdentity['db']; // vérif existence de l'utilisateur dans la base de données $user = $this->getUserMapper()->findByUsername($newIdentity); if ($user !== null) { $username = $user->getUsername(); } } if ($username === null && isset($currentIdentity['ldap'])) { // si l'identifiant demandé contient un @, on estime qu'il s'agit d'un eppn shibboleth : on autorise pas le mélange des genres! // todo: faire mieux if (strpos($newIdentity, '@') !== false) { throw new RuntimeException("Usurpation Shibboleth interdite depuis une authentification LDAP"); } /** @var People $currentIdentity */ $currentIdentity = $currentIdentity['ldap']; $identity = $currentIdentity['ldap']; // vérif existence de l'individu dans l'annuaire LDAP $ldapPeople = $this->getLdapPeopleMapper()->findOneByUsername($newIdentity); if (!$ldapPeople) { throw new RuntimeException("Identifiant LDAP inconnu"); if ($ldapPeople) { $username = $ldapPeople->getUsername(); } } } elseif (isset($currentIdentity['shib'])) { if ($username === null && isset($currentIdentity['shib'])) { // si l'identifiant demandé ne contient pas @, on estime qu'il s'agit d'un identifiant LDAP : on autorise pas le mélange des genres! // todo: faire mieux if (strpos($newIdentity, '@') === false) { throw new RuntimeException("Usurpation LDAP interdite depuis une authentification Shibboleth"); } /** @var ShibUser $currentIdentity */ $currentIdentity = $currentIdentity['shib']; $identity = $currentIdentity['shib']; $username = $identity->getUsername(); } else { if ($username === null) { return $this->redirect()->toRoute('home'); } // seuls les logins spécifiés dans la config sont habilités à usurper des identités if (! in_array($currentIdentity->getUsername(), $this->options->getUsurpationAllowedUsernames())) { if (! in_array($identity->getUsername(), $this->options->getUsurpationAllowedUsernames())) { throw new RuntimeException("Usurpation non explicitement autorisée"); } // cuisine spéciale pour Shibboleth if ($currentIdentity instanceof ShibUser) { $fromShibUser = $currentIdentity; // cuisine spéciale si l'utilisateur courant s'est authentifié via Shibboleth if (isset($currentIdentity['shib']) && $currentIdentity['shib'] instanceof ShibUser) { $fromShibUser = $currentIdentity['shib']; $toShibUser = $this->createShibUserFromUtilisateurUsername($newIdentity); $this->shibService->activateUsurpation($fromShibUser, $toShibUser); } Loading Loading
CHANGELOG.md +4 −0 Original line number Diff line number Diff line Loading @@ -37,3 +37,7 @@ Première version officielle sous ZF3. 3.1.2 ----- - Aide de vue UserUsurpationHelper : ajout de la possibilité de dessiner un simple bouton. 3.1.3 ----- - [FIX] Usurpation d'un compte local en BDD
src/UnicaenAuth/Controller/UtilisateurController.php +25 −11 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ namespace UnicaenAuth\Controller; use UnicaenApp\Exception\RuntimeException; use UnicaenApp\Mapper\Ldap\People as LdapPeopleMapper; use UnicaenAuth\Entity\Db\AbstractUser; use UnicaenAuth\Entity\Db\User; use UnicaenAuth\Entity\Ldap\People; use UnicaenAuth\Entity\Shibboleth\ShibUser; use UnicaenAuth\Formatter\RoleFormatter; Loading Loading @@ -135,41 +136,54 @@ class UtilisateurController extends AbstractActionController return $this->redirect()->toRoute('home'); } if (isset($currentIdentity['ldap'])) { $username = null; if ($username === null && isset($currentIdentity['db'])) { /** @var AbstractUser $currentIdentity */ $identity = $currentIdentity['db']; // vérif existence de l'utilisateur dans la base de données $user = $this->getUserMapper()->findByUsername($newIdentity); if ($user !== null) { $username = $user->getUsername(); } } if ($username === null && isset($currentIdentity['ldap'])) { // si l'identifiant demandé contient un @, on estime qu'il s'agit d'un eppn shibboleth : on autorise pas le mélange des genres! // todo: faire mieux if (strpos($newIdentity, '@') !== false) { throw new RuntimeException("Usurpation Shibboleth interdite depuis une authentification LDAP"); } /** @var People $currentIdentity */ $currentIdentity = $currentIdentity['ldap']; $identity = $currentIdentity['ldap']; // vérif existence de l'individu dans l'annuaire LDAP $ldapPeople = $this->getLdapPeopleMapper()->findOneByUsername($newIdentity); if (!$ldapPeople) { throw new RuntimeException("Identifiant LDAP inconnu"); if ($ldapPeople) { $username = $ldapPeople->getUsername(); } } } elseif (isset($currentIdentity['shib'])) { if ($username === null && isset($currentIdentity['shib'])) { // si l'identifiant demandé ne contient pas @, on estime qu'il s'agit d'un identifiant LDAP : on autorise pas le mélange des genres! // todo: faire mieux if (strpos($newIdentity, '@') === false) { throw new RuntimeException("Usurpation LDAP interdite depuis une authentification Shibboleth"); } /** @var ShibUser $currentIdentity */ $currentIdentity = $currentIdentity['shib']; $identity = $currentIdentity['shib']; $username = $identity->getUsername(); } else { if ($username === null) { return $this->redirect()->toRoute('home'); } // seuls les logins spécifiés dans la config sont habilités à usurper des identités if (! in_array($currentIdentity->getUsername(), $this->options->getUsurpationAllowedUsernames())) { if (! in_array($identity->getUsername(), $this->options->getUsurpationAllowedUsernames())) { throw new RuntimeException("Usurpation non explicitement autorisée"); } // cuisine spéciale pour Shibboleth if ($currentIdentity instanceof ShibUser) { $fromShibUser = $currentIdentity; // cuisine spéciale si l'utilisateur courant s'est authentifié via Shibboleth if (isset($currentIdentity['shib']) && $currentIdentity['shib'] instanceof ShibUser) { $fromShibUser = $currentIdentity['shib']; $toShibUser = $this->createShibUserFromUtilisateurUsername($newIdentity); $this->shibService->activateUsurpation($fromShibUser, $toShibUser); } Loading