Commit 9bf50f1b authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Améliroation de la récupération de l'utilisateur pour la génération de token...

Améliroation de la récupération de l'utilisateur pour la génération de token dans le module de soutenance
parent fc1b3178
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ use Soutenance\Entity\Qualite;
use Soutenance\Service\Qualite\QualiteServiceAwareTrait;
use UnicaenApp\Exception\RuntimeException;
use UnicaenApp\Service\EntityManagerAwareTrait;
use UnicaenAuth\Entity\Db\AbstractUser;
use UnicaenAuthToken\Entity\Db\AbstractUserToken;
use UnicaenAuthToken\Service\TokenServiceAwareTrait;
use UnicaenAuthToken\Service\TokenServiceException;
@@ -282,6 +283,31 @@ class MembreService {
        return ($nomusuel . "_" . $membre->getId());
    }

    /** RECUPERATION DE L'UTILSATEUR D'UN MEMBRE **********************************************************************/

    /**
     * @param Membre $membre
     * @return AbstractUser|null
     */
    public function getUtilisateur(Membre $membre) : ?AbstractUser
    {
        $acteur = $membre->getActeur();
        if ($acteur === null) return null;
        $individu = $acteur->getIndividu();
        if ($individu === null) return null;

        /** @var AbstractUser[] $utilisateurs */
        $utilisateurs = $individu->getUtilisateurs();
        $utilisateurs = array_filter($utilisateurs, function (AbstractUser $u) { return $u->getPassword() === 'none';});
        if (count($utilisateurs) !== 1 ) {
            $message = "Plusieurs utilisateurs locaux ont été trouvé pour " . $individu->getNomComplet() . " :";
            foreach ($utilisateurs as $utilisateur) $message .= " " . $utilisateur->getUsername() ."#". $utilisateur->getId();
            throw new RuntimeException($message);
        }

        return $utilisateurs[0];
    }

    /** GESTION DES TOKENS ********************************************************************************************/

    public function retrieveToken(Membre $membre) : ?AbstractUserToken
@@ -299,8 +325,11 @@ class MembreService {

    public function createToken(Membre $membre) : AbstractUserToken
    {
        $utilisateur = $this->getUtilisateur($membre);
        if ($utilisateur === null) {
            $username = $this->generateUsername($membre);
            $utilisateur = $this->getUtilisateurService()->getRepository()->findByUsername($username);
        }
        if ($utilisateur === null) throw new LogicException("Aucun utilisateur n'est correctement déclaré pour le membre [username:".$username."]");

        try {