src/Controller/SecurityController.php line 75

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Component\Mime\Email;
  4. use App\Repository\ContactsRepository;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Symfony\Component\Mailer\MailerInterface;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\DependencyInjection\ContainerInterface;
  10. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  11. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  14. class SecurityController extends AbstractController
  15. {
  16.     public function login(AuthenticationUtils $authenticationUtils): Response
  17.     {
  18.         // if ($this->getUser()) {
  19.         //     return $this->redirectToRoute('target_path');
  20.         // }
  21.         // get the login error if there is one
  22.         $error $authenticationUtils->getLastAuthenticationError();
  23.         // last username entered by the user
  24.         $lastUsername $authenticationUtils->getLastUsername();
  25.         return $this->render('security/login.html.twig', ['last_username' => $lastUsername'error' => $error]);
  26.     }
  27.     public function login_api(SessionInterface $sessionContactsRepository $repoContacts): Response
  28.     {
  29.         $user $this->getUser();
  30.         //si user est archivé
  31.         $contact $repoContacts->findOneBy(['mail' => $user->getUserIdentifier()]);
  32.         return $this->json(
  33.             $user,
  34.             200,
  35.             [],
  36.             ['groups' => 'affichageContact']
  37.         );
  38.     }
  39.     public function connexion1(
  40.         Request $request,
  41.         ContactsRepository $repoContacts,
  42.         EntityManagerInterface $manager,
  43.         MailerInterface $mailer,
  44.         ContainerInterface $container
  45.     ): Response {
  46.         //recupération du json envoyer par le client
  47.         $jsonRecu $request->getContent();
  48.         //recupération du mail
  49.         $obj json_decode($jsonRecu);
  50.         $mailRecu $obj->{'mail'};
  51.         //est ce que le mail est bien au format mail
  52.         //si le mail est valide on recherche le contact correspondant
  53.         $nouvelUtilisateur $repoContacts->findOneBy(['mail' => $mailRecu]);
  54.         if (empty($nouvelUtilisateur)) {
  55.             //si il n'y a pas de contact avec le mail envoyé
  56.             //retourne un json avec un message d'erreur
  57.             return $this->json([
  58.                 'status' => 401,
  59.                 'message' => "L'email est invalide"
  60.             ], 401);
  61.         } else {
  62.             //si il y a un contact avec le mail
  63.             //verifi si c'est bien la 1er connexion
  64.             if ($nouvelUtilisateur->getPassword() == '12345') {
  65.                 //genere un mot de passe aleatoire
  66.                 $caracteres '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  67.                 $longueurMax strlen($caracteres);
  68.                 $chaineAleatoire '';
  69.                 for ($i 0$i 6$i++) {
  70.                     $chaineAleatoire .= $caracteres[rand(0$longueurMax 1)];
  71.                 }
  72.                 //hash le mot de passe
  73.                 $passwordHasher $container->get("security.password_encoder");
  74.                 $password $passwordHasher->encodePassword($nouvelUtilisateur$chaineAleatoire);
  75.                 //l'enregistre en base
  76.                 $nouvelUtilisateur->setPassword($password);
  77.                 $manager->persist($nouvelUtilisateur);
  78.                 $manager->flush();
  79.                 //envoi du mail au contact
  80.                 $email = (new Email())
  81.                     ->from($_ENV["APP_MAIL_PROD"] === "0" 'nicolas@cco-info.fr' 'noreply@cco-cloud.fr'// il faut voir la configuration du smtp !!!!!
  82.                     ->to($mailRecu)
  83.                     ->subject('Votre mot de passe CCO')
  84.                     ->html("<p>Votre mot de passe est : " $chaineAleatoire "</p>");
  85.                 $mailer->send($email);
  86.                 //retourne un json avec un message comme quoi le mot de passe a été envoyé par mail
  87.                 return $this->json([
  88.                     'status' => 200,
  89.                     'message' => "Le mot de passe vous a été envoyé par mail"
  90.                 ], 200);
  91.             } else {
  92.                 //retourne un json avec un message d'erreur
  93.                 return $this->json([
  94.                     'status' => 401,
  95.                     'message' => "Ceci n'est pas votre première connexion"
  96.                 ], 401);
  97.             }
  98.         }
  99.     }
  100.     /**
  101.      * Route("/logout", name="app_logout")
  102.      */
  103.     public function logout()
  104.     {
  105.         return $this->json("");
  106.         //        throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
  107.     }
  108.     /**
  109.      * getRoles Retourne la liste de tous les roles
  110.      *
  111.      * @param ContainerInterface $container
  112.      * 
  113.      * @return [type]
  114.      */
  115.     public function getRoles(ContainerInterface $container)
  116.     {
  117.         $roles = [];
  118.         foreach ($container->getParameter('security.role_hierarchy.roles') as $name => $value) {
  119.             $roles[] = $name;
  120.         }
  121.         return $this->json($roles201);
  122.     }
  123.     public function changePassword(
  124.         Request $request,
  125.         ContactsRepository $repoContacts,
  126.         EntityManagerInterface $manager,
  127.         ContainerInterface $container
  128.     ) {
  129.         $jsonRecu json_decode($request->getContent());
  130.         $newPassword $jsonRecu->newPassword;
  131.         $idUser $jsonRecu->idUser;
  132.         $user $repoContacts->findOneBy(['mail' => $this->getUser()->getUserIdentifier()]);
  133.         if ($user->getId() !== $idUser)
  134.             return $this->json([
  135.                 'status' => 410,
  136.                 'message' => "Vous n'avez pas les droits"
  137.             ], 410);
  138.         $passwordHasher $container->get("security.password_encoder");
  139.         $newPassword $passwordHasher->encodePassword($user$newPassword);
  140.         $user->setPassword($newPassword);
  141.         $manager->persist($user);
  142.         $manager->flush();
  143.         return $this->json(true200);
  144.     }
  145.     /**
  146.      * @IsGranted("ROLE_COMMERCIAL")
  147.      */
  148.     public function sendNewPassword($idContactsRepository $repoContactsEntityManagerInterface $managerMailerInterface $mailerContainerInterface $container): Response
  149.     {
  150.         //si le mail est valide on recherche le contact correspondant
  151.         $nouvelUtilisateur $repoContacts->findOneBy(['id' => $id]);
  152.         if (empty($nouvelUtilisateur)) {
  153.             return $this->json([
  154.                 'status' => 401,
  155.                 'message' => "Il n'y a pas d'utilisateur pour l'identifiant spécifié"
  156.             ], 401);
  157.         } else {
  158.             $caracteres '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  159.             $longueurMax strlen($caracteres);
  160.             $chaineAleatoire '';
  161.             for ($i 0$i 6$i++) {
  162.                 $chaineAleatoire .= $caracteres[rand(0$longueurMax 1)];
  163.             }
  164.             $passwordHasher $container->get("security.password_encoder");
  165.             $password $passwordHasher->encodePassword($nouvelUtilisateur$chaineAleatoire);
  166.             $nouvelUtilisateur->setPassword($password);
  167.             $manager->persist($nouvelUtilisateur);
  168.             $manager->flush();
  169.             //envoi du mail au contact
  170.             $email = (new Email())
  171.                 ->from($_ENV["APP_MAIL_PROD"] === "0" 'nicolas@cco-info.fr' 'noreply@cco-cloud.fr'// il faut voir la configuration du smtp !!!!!
  172.                 ->to($nouvelUtilisateur->getMail())
  173.                 ->subject('Votre mot de passe CCO')
  174.                 ->html("<p>Votre mot de passe est : " $chaineAleatoire "</p>");
  175.             $mailer->send($email);
  176.             //retourne un json avec un message comme quoi le mot de passe a été envoyé par mail
  177.             return $this->json([
  178.                 'status' => 200,
  179.                 'message' => "Le mot de passe a été envoyé par mail"
  180.             ], 200);
  181.         }
  182.     }
  183. }