- <?php
- namespace App\Controller;
- use App\Entity\Newsletter;
- use App\Form\Type\NewsletterType;
- use Doctrine\DBAL\Exception;
- use Doctrine\Persistence\ManagerRegistry;
- use phpDocumentor\Reflection\Types\Mixed_;
- use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
- use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
- use Symfony\Component\HttpFoundation\Request;
- use Symfony\Component\HttpFoundation\Response;
- use Symfony\Component\HttpKernel\EventListener\AbstractSessionListener;
- use Symfony\Component\Routing\Annotation\Route;
- use Google\Cloud\RecaptchaEnterprise\V1\RecaptchaEnterpriseServiceClient;
- use Google\Cloud\RecaptchaEnterprise\V1\Event;
- use Google\Cloud\RecaptchaEnterprise\V1\Assessment;
- use Google\Cloud\RecaptchaEnterprise\V1\TokenProperties\InvalidReason;
- class HomeController extends AbstractController
- {
-     /**
-      * @var ParameterBagInterface
-      */
-     private $params;
-     public function __construct(ParameterBagInterface $params)
-     {
-         $this->params = $params;
-     }
-     /**
-      * @Route("/", name="index")
-      * @param Request $request
-      * @return Response
-      */
-     public function index(Request $request): Response
-     {
-         $page = $request->get('page', null);
-         if($page === 'beta') {
-             return $this->render('home/beta.html.twig', [
-             ]);
-         } else {
-             // creates a task object and initializes some data for this example
-             $newsletter = new Newsletter();
-             $form = $this->createForm(NewsletterType::class, $newsletter, [
-                 'action' => $this->generateUrl('thank_you'),
-                 'method' => 'POST'
-             ]);
-             $response = $this->render('home/index.html.twig', [
-                 'form' => $form->createView()
-             ]);
-             $response->setPublic();
-             $response->setMaxAge(2500000);
-             $response->headers->addCacheControlDirective('must-revalidate', true);
-             $response->headers->set(AbstractSessionListener::NO_AUTO_CACHE_CONTROL_HEADER, 'true');
-             return $response;
-         }
-     }
-     /**
-      * @Route("/trading-strategy-algorithm-that-will-work-at-any-time", name="trading_strategy_text")
-      */
-     public function tradingStrategyText(): Response
-     {
-         return $this->render('home/trading-strategy-text.html.twig', [
-         ]);
-     }
-     /**
-      * @Route("/privacy-policy", name="privacy_policy")
-      */
-     public function privacyPolicy(): Response
-     {
-         return $this->render('home/privacy-policy.html.twig', [
-         ]);
-     }
-     /**
-      * @Route("/thank-you", name="thank_you")
-      * @param Request $request
-      * @param ManagerRegistry $registry
-      * @return Response
-      */
-     public function thankYou(Request $request, ManagerRegistry $registry): Response
-     {
-         $error = false;
-         $duplicate = false;
-         // just set up a fresh $task object (remove the example data)
-         $newsletter = new Newsletter();
-         $form = $this->createForm(NewsletterType::class, $newsletter);
-         $form->handleRequest($request);
-         if ($form->isSubmitted() && $form->isValid()) {
-             // $form->getData() holds the submitted values
-             // but, the original `$task` variable has also been updated
-             $newsletter = $form->getData();
-             $newsletter->setCreatedAt(new \DateTimeImmutable('now'));
-             $newsletter->setIp($_SERVER['REMOTE_ADDR']);
- //            dump($newsletter);
-             $recaptcha_response = $request->get('g-recaptcha-response');
- //            dump($recaptcha_response);
- //            $score = $this->create_assessment(
- //                '6LeRJt0eAAAAAMYqufqaweCRDb0fDBLm_ub20maZ',
- //                $recaptcha_response,
- //                'ntnewsletter'
- //            );
- //            dump('This is score in TY controller', $score);
-             try {
-                 $entityManager = $registry->getManager();
-                 $entityManager->persist($newsletter);
-                 $entityManager->flush();
-             } catch (Exception\UniqueConstraintViolationException $exception) {
- //                dump($exception);
-                 $duplicate = true;
-             } catch (\Exception $exception) {
-                 $error = true;
-             }
-             return $this->render('home/thank-you.html.twig', [
-                 'form' => $form,
-                 'error' => $error,
-                 'duplicate' => $duplicate
-             ]);
-         } else {
-             return $this->redirectToRoute('index');
-         }
-     }
-     /**
-      * Create an assessment to analyze the risk of a UI action.
-      * @param string $siteKey The key ID for the reCAPTCHA key (See https://cloud.google.com/recaptcha-enterprise/docs/create-key)
-      * @param string $token The user's response token for which you want to receive a reCAPTCHA score. (See https://cloud.google.com/recaptcha-enterprise/docs/create-assessment#retrieve_token)
-      * @param string $project Your Google Cloud project ID
-      * @return null|mixed
-      */
-     function create_assessment(string $siteKey, string $token, string $project) {
-         $score = null;
-         // TODO: To avoid memory issues, move this client generation outside
-         // of this example, and cache it (recommended) or call client.close()
-         // before exiting this method.
-         $client = new RecaptchaEnterpriseServiceClient();
-         $projectName = $client->projectName($project);
-         $event = (new Event())
-             ->setSiteKey($siteKey)
-             ->setToken($token);
-         $assessment = (new Assessment())
-             ->setEvent($event);
-         try {
-             $response = $client->createAssessment(
-                 $projectName,
-                 $assessment
-             );
-             // You can use the score only if the assessment is valid,
-             // In case of failures like re-submitting the same token, getValid() will return false
-             if ($response->getTokenProperties()->getValid() == false) {
-                 dump('The CreateAssessment() call failed because the token was invalid for the following reason: ');
-                 dump(InvalidReason::name($response->getTokenProperties()->getInvalidReason()));
-             } else {
-                 dump('The score for the protection action is:');
-                 $score = $response->getRiskAnalysis()->getScore();
-                 // Optional: You can use the following methods to get more data about the token
-                 // Action name provided at token generation.
-                 // printf($response->getTokenProperties()->getAction() . PHP_EOL);
-                 // The timestamp corresponding to the generation of the token.
-                 // printf($response->getTokenProperties()->getCreateTime()->getSeconds() . PHP_EOL);
-                 // The hostname of the page on which the token was generated.
-                 // printf($response->getTokenProperties()->getHostname() . PHP_EOL);
-             }
-         } catch (\Exception $e) {
-             dump('CreateAssessment() call failed with the following error: ');
-             dump($e);
-         }
-         return $score;
-     }
- }
-