src/Handlers/Servizio/DefaultAnonymousHandler.php line 13

Open in your IDE?
  1. <?php
  2. namespace App\Handlers\Servizio;
  3. use App\Entity\CPSUser;
  4. use App\Entity\Pratica;
  5. use App\Entity\Servizio;
  6. use App\Logging\LogConstants;
  7. use Symfony\Component\HttpFoundation\RedirectResponse;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Security\Http\Util\TargetPathTrait;
  10. class DefaultAnonymousHandler extends DefaultHandler
  11. {
  12.   use TargetPathTrait;
  13.   /**
  14.    * @param Servizio $servizio
  15.    * @return Response
  16.    * @throws \Exception
  17.    */
  18.   public function execute(Servizio $servizio)
  19.   {
  20.     $user $this->createAnonymousUser();
  21.     $pratica $this->createNewPratica($servizio$user);
  22.     $this->em->flush();
  23.     if (!$this->session->isStarted()) {
  24.       $this->session->start();
  25.     }
  26.     // Loggo l'utente appena creato
  27.     $this->saveTargetPath($this->session'open_login'$this->router->generate('pratiche_compila', ['pratica' => $pratica->getId()]));
  28.     return new RedirectResponse(
  29.       $this->router->generate('login_token', ['token' => $user->getConfirmationToken()]),
  30.       302
  31.     );
  32.   }
  33.   /**
  34.    * @param Servizio $servizio
  35.    * @param CPSUser $user
  36.    * @return Pratica
  37.    */
  38.   private function createNewPratica(Servizio $servizioCPSUser $user): Pratica
  39.   {
  40.     $praticaClassName $servizio->getPraticaFCQN();
  41.     $pratica = new $praticaClassName();
  42.     if (!$pratica instanceof Pratica) {
  43.       throw new \RuntimeException("Wrong Pratica FCQN for servizio {$servizio->getName()}");
  44.     }
  45.     $pratica
  46.       ->setServizio($servizio)
  47.       ->setUser($user)
  48.       ->setAuthenticationData($this->userSessionService->getCurrentUserAuthenticationData($user))
  49.       ->setSessionData($this->userSessionService->getCurrentUserSessionData($user))
  50.       ->setStatus(Pratica::STATUS_DRAFT)
  51.       ->setHash(hash('sha256'$pratica->getId()).'-'.(new \DateTime())->getTimestamp());
  52.     $ente $servizio->getEnte();
  53.     $pratica->setEnte($ente);
  54.     foreach ($servizio->getErogatori() as $erogatore) {
  55.       if ($erogatore->getEnti()->contains($ente)) {
  56.         $pratica->setErogatore($erogatore);
  57.       }
  58.     }
  59.     $this->em->persist($pratica);
  60.     $this->logger->info(
  61.       LogConstants::PRATICA_CREATED,
  62.       ['type' => $pratica->getType(), 'pratica' => $pratica]
  63.     );
  64.     return $pratica;
  65.   }
  66.   /**
  67.    * @return CPSUser
  68.    */
  69.   private function createAnonymousUser(): CPSUser
  70.   {
  71.     $sessionString md5($this->session->getId()) . '-' time();
  72.     $user = new CPSUser();
  73.     $email $user->getId()->toString() . '@' CPSUser::ANONYMOUS_FAKE_EMAIL_DOMAIN;
  74.     $user
  75.       ->setUsername($user->getId()->toString())
  76.       ->setNome('Anonymous')
  77.       ->setCognome('User')
  78.       ->setCodiceFiscale($user->getId()->toString())
  79.       ->setDataNascita(new \DateTime())
  80.       ->setLuogoNascita('-')
  81.       ->setEmail($email)
  82.       ->setEmailContatto($email)
  83.       ->setConfirmationToken(hash('sha256'$sessionString));
  84.     $user->addRole('ROLE_USER')
  85.       ->addRole('ROLE_CPS_USER')
  86.       ->setEnabled(true)
  87.       ->setPassword('');
  88.     $this->em->persist($user);
  89.     return $user;
  90.   }
  91. }