<?php
namespace App\Controller;
use App\Classe\MailBrevo;
use App\Entity\PasswordUpdate;
use App\Entity\User;
use App\Form\AccountType;
use App\Form\EmailResetType;
use App\Form\PasswordResetType;
use App\Form\PasswordUpdateType;
use App\Form\RegistrationType;
use App\Repository\UserRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Component\HttpFoundation\Response;
class SecurityController extends AbstractController
{
private $entityManager;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
/**
* @Route("/inscription", name="security_registration")
*/
public function registration(Request $request, UserPasswordHasherInterface $encoder)
{
$user = new User();
$form = $this->createForm(RegistrationType::class, $user);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$hash = $encoder->hashPassword($user, $user->getPassword());
$user->setPassword($hash);
$user->setCreatedAt(new \DateTime());
$this->entityManager->persist($user);
$this->entityManager->flush();
$this->addFlash('souscription', '');
return $this->redirectToRoute('security_login');
}
return $this->render('security/registration.html.twig', [
'form' => $form->createView(),
]);
}
/**
* @Route("/", name="security_login")
*/
public function login(AuthenticationUtils $utils)
{
$error = $utils->getLastAuthenticationError();
$username = $utils->getLastUsername();
return $this->render('security/login.html.twig', [
'hasError' => $error !== null,
'username' => $username,
]);
}
/**
* @Route("/deconnexion ", name="security_logout")
*/
public function logout()
{
}
/**
* Permet de modifier le mail utilisateur
* @Route("/account/profile ", name="account_profile")
*/
public function profile(Request $request)
{
$user = $this->getUser();
$form = $this->createForm(AccountType::class, $user);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$this->entityManager->persist($user);
$this->entityManager->flush();
$this->addFlash('modif-mail', "");
return $this->redirectToRoute('dashboard_user');
}
return $this->render('recensement/profile.html.twig', [
'form' => $form->createView()
]);
}
/**
* Permet de modifier le mot de passe utilisateur
* @Route("/account/password-update", name="account_update_password")
*/
public function updatePassword(Request $request, UserPasswordEncoderInterface $encoder)
{
$passwordUpdate = new PasswordUpdate();
$user = $this->getUser();
$form = $this->createForm(PasswordUpdateType::class, $passwordUpdate);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
//1. Vérifier que le oldPAssword du formulaire soit le même que le password de l’
if(!password_verify($passwordUpdate->getOldPassword(), $user->getPassword())){
// Gérer l'erreur
}else{
// Sauvegarder le nouveau mot de passe
$newPassword = $passwordUpdate->getNewPassword();
$password = $encoder->encodePassword($user, $newPassword);
$user->setPassword($password);
$this->entityManager->persist($user);
$this->entityManager->flush();
$this->addFlash('modif-password', "");
}
return $this->redirectToRoute('dashboard_user');
}
return $this->render('recensement/password.html.twig', [
'form' => $form->createView()
]);
}
/**
* Permet d’envoyer un mail avec un token à un utilisateur qui a oublié son mot de passe
* @Route("/account/password-forget", name="account_forget_password")
*/
public function forgetPassword(UserRepository $repoUser, Request $request)
{
$form = $this->createForm(EmailResetType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user = $repoUser->findOneByEmail($form->getData()['email']);
if ($user !== null) {
$token = md5(uniqid());
$user->setResetPassword($token)
->setResetPasswordDate(new \DateTime());
$this->entityManager->persist($user);
$this->entityManager->flush();
$mail = $user->getEmail();
$envoi_mail = new MailBrevo();
$content = "
<h3>Réinitialisation du mot de passe !</h3>
<p>Bonjour,</p>
<p>Vous avez oublié votre mot de passe pour vous connecter à la base de recensement des professionnels de l'image en Normandie.</p>
<p>
Le lien suivant vous permettra de générer un nouveau mot de passe :
<a href='https://annuaire-pro.normandieimages.net/account/password-reset/$token'>générer un nouveau mot de passe</a>
</p>
<p><strong>Attention celui-ci n’est actif que durant 10mn !</strong></p>
<p>
Cordialement,<br>
<img src='https://www.inscriptionsfondsaide.normandieimages.fr/img/ni-logo-72.jpg' alt='Normandie Images' width='35'><br>
ATRIUM - 115 boulevard de l'Europe<br>
76100 ROUEN<br>
<a href='https://www.normandieimages.fr'>www.normandieimages.fr</a>
</p>
<p></p>";
$envoi_mail->send("stephanehortet@normandieimages.fr", "Normandie Images - Stéphane Hortet", $mail, $mail, "Réinitialisation du mot de passe - recensement des professionnels de l'image en Normandie", $content);
return $this->render('security/reset-password-confirmation.html.twig');
}else{
$this->addFlash('erreur-mail', "");
}
}
return $this->render('security/reset-password.html.twig', array(
'form' => $form->createView(),
));
}
/**
* Permet de se connecter via un lien avec token reçu par mail
* @Route("/account/password-reset/{token}", name="account_reset_password")
*/
public function resetPasswordToken($token, UserRepository $repoUser, Request $request, UserPasswordEncoderInterface $encoder)
{
if ($token !== null) {
$user = $repoUser->findOneByResetPassword($token);
$token_date = $user->getResetPasswordDate();
$date_now = new \DateTime();
$interval = $token_date->diff($date_now);
if ($user !== null && $interval->i <= 10) {
$form = $this->createForm(PasswordResetType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$hash = $encoder->encodePassword($user, $user->getPassword());
$user->setPassword($hash);
$this->entityManager->persist($user);
$this->entityManager->flush();
$this->addFlash('reinitialisation', '');
return $this->redirectToRoute('security_login');
}
return $this->render('security/reset-password-token.html.twig', array(
'form' => $form->createView(),
));
}else{
return $this->render('security/reset-password-token-expired.html.twig');
}
}
}
/**
* @Route("/mentions_legales", name="mentions_legales")
*/
public function mentions()
{
return $this->render('security/mentions_legales.html.twig');
}
}