<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Form\RecoveryFormType;
use App\Form\ChangePasswordFormType;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use App\Services\CallApiServices;
use App\Services\QuestionMailService;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Security\Http\Authentication\UserAuthenticatorInterface;
class RecoveryController extends AbstractController
{
#[Route('/recovery', name: 'app_recovery')]
public function index(Request $request, CallApiServices $callApiServices, QuestionMailService $questionMailService): Response
{
$serviceId = $this->getParameter('app.serviceId');
$accountId = $this->getParameter('app.accountId');
$form = $this->createForm(RecoveryFormType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$clientForgotPassword = $callApiServices->clientForgotPassword($serviceId, $data['email']);
if (isset($clientForgotPassword['clientId'])){
$client = $callApiServices->clientProfile($serviceId, $clientForgotPassword['clientId'], $clientForgotPassword['reqToken']);
}else{
//Envoie Flash message
$this->addFlash("Erreur", "Erreur : Aucun compte correspondant à cette adresse e-mail. Veuillez vérifier que vous avez entré l'adresse e-mail correcte et réessayer.");
//Redirection page Login
return $this->redirectToRoute("app_login");
}
if ($clientForgotPassword['findEmail'] == true) {
//Envoie mail de reset password
$questionMailService->resetPasswordMail($data['email'], $clientForgotPassword['reqToken'], $clientForgotPassword['limitToken'], $clientForgotPassword['clientId'], $request, $serviceId, $client);
//Envoie Flash message
$this->addFlash("recovery", "Vous allez recevoir un mail afin de reinitialiser votre mot de passe d'un moment à l'autre.
Si vous ne recevez pas le mail, veuillez vérifier dans votre boîte SPAM ou courrier indésirable, s'il s'y trouve !! ");
//Redirection page Login
return $this->redirectToRoute("app_login");
}
if ($clientForgotPassword['findEmail'] == false) {
$this->addFlash("nonValide", "Votre adresse mail ne corespond pas ");
return $this->render('recovery/index.html.twig', [
'recoveryForm' => $form->createView(),
]);
}
}
return $this->render('recovery/index.html.twig', [
'recoveryForm' => $form->createView(),
]);
}
/**
* @Route("/recoveryPassword", name="app_changePassword")
*/
public function checkRegister(CallApiServices $callApiServices, Request $request, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager): Response
{
$serviceId = $this->getParameter('app.serviceId');
$accountId = $this->getParameter('app.accountId');
$validation = [
'reqToken' => $request->get('reqToken'),
'limitToken' => $request->get('limitToken'),
'clientId' => $request->get('clientId')
];
$client = $callApiServices->clientProfile($serviceId, $validation['clientId']);
$username = $client['username'];
$form = $this->createForm(ChangePasswordFormType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid())
{
$data = $form->getData();
$oldPassword = "";
$newPassword = $data['password'];
$changePassword = $callApiServices->clientResetPassword($serviceId, $validation['clientId'], $oldPassword, $newPassword, $validation['reqToken'], $validation['limitToken'] );
$this->addFlash("changePassword", "Votre mot de passe a bien été reinitialisé, vous pouver désormais profiter de toutes les fonctionnalités de la plateforme.");
return $this->redirectToRoute("app_login");
}
return $this->render('recovery/changePassword.html.twig', [
'changePasswordForm' => $form->createView(),
]);
}
}