<?php
namespace App\Controller;
use App\Entity\Client;
use App\Entity\Config;
use App\Entity\UserContact;
use App\Form\RegistrationFormType;
use App\Form\SocialRegistrationFormType;
use App\Security\UserContactAuthenticator;
use App\Services\CallApiServices;
use App\Services\QuestionMailService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\UserAuthenticatorInterface;
use ReCaptcha\ReCaptcha; // Include the recaptcha lib
class RegistrationController extends AbstractController
{
/**
* @Route("/register", name="app_register")
*/
public function register(CallApiServices $callApiServices, QuestionMailService $questionMailService, Request $request, UserPasswordHasherInterface $userPasswordHasher, UserAuthenticatorInterface $userAuthenticator, UserContactAuthenticator $authenticator, EntityManagerInterface $entityManager): Response
{
$user = new Client();
$serviceId = $this->getParameter('app.serviceId');
$accountId = $this->getParameter('app.accountId');
$config = $callApiServices->configuratationPlateforme($accountId, $serviceId);
$session = $request->getSession();
$addressIp =$request->getClientIp();
if ($session->get('parrainId') == null){
$parrainId = "0";
}else{
$parrainId = $session->get('parrainId');
}
$recaptchaKey = $config['recaptchaTab']['sitekey'];
$secretkey = $config['recaptchaTab']['secretkey'];
$messageError = "";
$form = $this->createForm(RegistrationFormType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$recaptcha = new ReCaptcha($secretkey);
$resp = $recaptcha->verify($request->request->get('g-recaptcha-response'), $request->getClientIp());
if (!$resp->isSuccess()) {
// Do something if the submit wasn't valid ! Use the message to show something
$messageError = "Le reCAPTCHA n'a pas été saisi correctement. Réessayez.";
} else {
// encode the plain password
$user->setPassword($form->get('plainPassword')->getData());
$clientInscription = $callApiServices->clientInscription(
$serviceId,
$parrainId,
$user->getGenre(),
$user->getEmail(),
$user->getPassword(),
$user->getLastName(),
$user->getFirstName(),
$user->getPhoneNumber(),
$addressIp
);
$user->setCode($clientInscription['code']);
$user->setServiceId($serviceId);
if (isset($clientInscription['code']) && ($clientInscription['code'] == '403')) {
$this->addFlash("inscription", "Un enregistrement correspondant existe déjà ");
return $this->render('registration/register.html.twig', [
'registrationForm' => $form->createView(),
"recaptchaKey" => $recaptchaKey,
"messageError" => $messageError,
]);
} else {
$this->addFlash("inscription", "Bienvenue dans notre cabinet de voyance.
Votre inscription a été prise en compte.
Vous allez recevoir un mail pour activer votre compte.
Pensez à vérifier dans les SPAM si vous n’avez pas reçu le mail.");
}
// Envoie de Mail.
$questionMailService->checkMail($user, $request);
return $this->redirectToRoute("app_login");
}
}
return $this->render('registration/register.html.twig', [
'registrationForm' => $form->createView(),
"recaptchaKey" => $recaptchaKey,
"messageError" => $messageError,
]);
}
/**
* @Route("/checkRegister", name="app_check")
*/
public function checkRegister(CallApiServices $callApiServices, Request $request, UserPasswordHasherInterface $userPasswordHasher, UserAuthenticatorInterface $userAuthenticator, UserContactAuthenticator $authenticator, EntityManagerInterface $entityManager): Response
{
// @todo No password passed in URL!
$validation = [
'serviceId' => $request->get('serviceId'),
'username' => $request->get('username'),
'password' => $request->get('password'),
'code' => $request->get('code')
];
$user = $callApiServices->clientInscriptionValidation($validation['serviceId'], $validation['username'], $validation['password'], $validation['code'], 1);
if (isset($user['code']) && ($user['code'] == '403')) {
$this->addFlash("inscriptionCheck", "Votre compte adéja été activer vous ne pouvez plus l'activé");
}else{
$this->addFlash("inscriptionCheck", "Votre compte a bien été activé, vous pouver désormais profiter de toutes les fonctionnalités de la plateforme.");
}
return $this->redirectToRoute("app_login");
}
}