src/Controller/DefaultController.php line 36

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Intervention;
  4. use App\Entity\Payment;
  5. use App\Entity\User;
  6. use App\Security\TokenAuthenticator;
  7. use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
  8. use Doctrine\Persistence\ObjectManager;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\HttpClient\HttpClient;
  11. use Symfony\Component\HttpFoundation\JsonResponse;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use Mailjet\Resources;
  15. use Stripe\Stripe;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  18. use Symfony\Component\Security\Core\User\UserProviderInterface;
  19. use Symfony\Component\Security\Guard\GuardAuthenticatorHandler;
  20. class DefaultController extends AbstractController
  21. {
  22.     private $pwEncoder;
  23.     private $userProvider;
  24.     public function __construct(UserProviderInterface $userProviderUserPasswordEncoderInterface $pwEncoder)
  25.     {
  26.         $this->userProvider $userProvider;
  27.         $this->pwEncoder $pwEncoder;
  28.     }
  29.     public function index(): Response
  30.     {
  31.         return $this->render('app/index.html.twig');
  32.     }
  33.     public function test(Request $request)
  34.     {
  35. //        return new JsonResponse($this->isGranted('ROLE_USER'));
  36. //        $client = HttpClient::create();
  37. //
  38. //        $response = $client->request('POST', 'https://api.mailjet.com/v4/sms-send', [
  39. //            'headers' => [
  40. //                'Authorization' => 'Bearer 69c42935f95046598fed9baecc36f758',
  41. //                'Content-Type' => 'application/json'
  42. //            ],
  43. //            'body' => [
  44. //                'Text' => 'Merci de vous faire vacciner svp',
  45. //                'To' => '+33695156479',
  46. //                'From' => 'Conseil européen'
  47. //            ],
  48. //        ]);
  49. //        return new JsonResponse($response);
  50. //        dump(substr('Bearer nils', 0, 6) === "Bearer");
  51. //        dump($this->userProvider->loadUserByUsername("nils"));
  52. //        dump($request);
  53.         echo "nils";
  54.         exit;
  55.     }
  56.     public function sendSms(Request $request)
  57.     {
  58.         $tel $request->request->get('tel');
  59.         $tel str_replace(' '''$tel);
  60.         $tel str_replace('.'''$tel);
  61.         if (substr($tel03) != "+33" && substr($tel01) == "0")
  62.         {
  63.             $tel "+33".substr($tel1);
  64.         }
  65.         $em     $this->getDoctrine()->getManager();
  66.         $user   $em->getRepository(User::class)->findOneByTel($tel);
  67.         if (!$user)
  68.         {
  69.             $user = new User();
  70.         }
  71.         $code mt_rand(1111,9999);
  72.         $user->setTel($tel);
  73.         $user->setPassword("code");
  74.         $user->setCodeSms($code);
  75.         $url "https://api.mailjet.com/v4/sms-send";
  76.         $curl curl_init($url);
  77.         curl_setopt($curlCURLOPT_URL$url);
  78.         curl_setopt($curlCURLOPT_POSTtrue);
  79.         curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
  80.         $headers = array(
  81.             "Content-Type: application/json",
  82.             "Authorization: Bearer 67492d5bf526461990fb22b985817297",
  83.         );
  84.         curl_setopt($curlCURLOPT_HTTPHEADER$headers);
  85.         $data ='
  86.         {"From": "BlueStork",
  87.         "To": "'.$tel.'",
  88.         "Text": "Bienvenue chez BlueStork ! Votre code est le '.$code.'."}
  89.        ';
  90.         curl_setopt($curlCURLOPT_POSTFIELDS$data);
  91.         //for debug only!
  92.         curl_setopt($curlCURLOPT_SSL_VERIFYHOSTfalse);
  93.         curl_setopt($curlCURLOPT_SSL_VERIFYPEERfalse);
  94.         $resp curl_exec($curl);
  95.         curl_close($curl);
  96.         $resp_decoded json_decode($resp);
  97.        if ($resp_decoded->Status->Code == 1)
  98.        {
  99.            $em->persist($user);
  100.            $em->flush();
  101.            return new JsonResponse("SMS sent"200);
  102.        }else
  103.        {
  104.            return new JsonResponse("SMS error"400);
  105.        }
  106.     }
  107.     public function login(Request $request)
  108.     {
  109.         $em $this->getDoctrine()->getManager();
  110.         if ($request->request->get('token'))
  111.         {
  112.             $user $em->getRepository(User::class)->findOneByApiToken($request->request->get('token'));
  113.             if ($user)
  114.             {
  115.                 return new JsonResponse($user->getApiToken(), 200);
  116.             }else
  117.             {
  118.                 return new JsonResponse("Invalid Token"404);
  119.             }
  120.         }
  121.         if ($request->request->get('tel'))
  122.         {
  123.             $user $em->getRepository(User::class)->findOneByTel($request->request->get('tel'));
  124.             if ($user && $this->pwEncoder->isPasswordValid($user$request->request->get('password')))
  125.             {
  126.                 return new JsonResponse($user->getApiToken(), 200);
  127.             }else if ($user->getPassword() == "code")
  128.             {
  129.                 return new JsonResponse("code"404);
  130.             }else if ($user->getPassword() == "register")
  131.             {
  132.                 return new JsonResponse("register"404);
  133.             }else
  134.             {
  135.                 return new JsonResponse("wrong password"404);
  136.             }
  137.         }
  138.         return new JsonResponse("Not found"404);
  139.     }
  140.     public function getUserInfo(Request $request)
  141.     {
  142.         $em $this->getDoctrine()->getManager();
  143.         $user $em->getRepository(User::class)->findOneByTel($request->request->get('tel'));
  144.         $infos = [];
  145.         $infos["id"]            = $user->getId();
  146.         $infos["email"]         = $user->getEmail();
  147.         $infos["name"]          = $user->getName();
  148.         $infos["firstname"]     = $user->getFirstname();
  149.         $infos["address"]       = $user->getAddress();
  150.         $infos["subaddress"]    = $user->getSubaddress();
  151.         $infos["town"]          = $user->getTown();
  152.         $infos["cp"]            = $user->getCp();
  153.         return new JsonResponse($infos);
  154.     }
  155.     public function setUserInfo(Request $request)
  156.     {
  157.         $em $this->getDoctrine()->getManager();
  158.         $user $em->getRepository(User::class)->findOneByTel($request->request->get('tel'));
  159.         $firstname              $request->request->get("firstname");
  160.         $name                   $request->request->get("name");
  161.         $address                $request->request->get("address");
  162.         $subaddress             $request->request->get("subaddress");
  163.         $cp                     $request->request->get("cp");
  164.         $town                   $request->request->get("town");
  165.         $email                  $request->request->get("email");
  166.         $user->setFirstname($firstname);
  167.         $user->setName($name);
  168.         $user->setAddress($address);
  169.         $user->setSubAddress($subaddress);
  170.         $user->setCp($cp);
  171.         $user->setTown($town);
  172.         $user->setEmail($email);
  173.         $em->persist($user);
  174.         $em->flush();
  175.         return new JsonResponse("Done");
  176.     }
  177.     public function checkUser(Request $request)
  178.     {
  179.         $em $this->getDoctrine()->getManager();
  180.         $tel $request->request->get('tel');
  181.         $tel str_replace(' '''$tel);
  182.         $tel str_replace('.'''$tel);
  183.         if (substr($tel03) != "+33" && substr($tel01) == "0")
  184.         {
  185.             $tel "+33".substr($tel1);
  186.         }
  187.         $user $em->getRepository(User::class)->findOneByTel($tel);
  188.         if (!$user)
  189.         {
  190.             $codeSMS mt_rand(111111,999999);
  191.             $user = new User();
  192.             $user->setTel($tel);
  193.             $user->setCodeSms($codeSMS);
  194.             $em->persist($user);
  195.             $em->flush();
  196.             $client HttpClient::create();
  197.             $response $client->request('POST''https://api.mailjet.com/v4/sms-send', [
  198.                 'headers' => [
  199.                     'Authorization' => 'Bearer 69c42935f95046598fed9baecc36f758',
  200.                     'Content-Type' => 'application/json'
  201.                 ],
  202.                 'body' => [
  203.                     'Text' => "Bienvenue chez BlueStork ! Votre code d'activation est : ".$codeSMS,
  204.                     'To' => $request->request->get('tel'),
  205.                     'From' => 'BlueStork'
  206.                 ],
  207.             ]);
  208.             return new JsonResponse('Not found'404);
  209.         }elseif ($user->getPassword() == "register")
  210.         {
  211.             return new JsonResponse('register');
  212.         }elseif ($user->getPassword() == "code")
  213.         {
  214.             return new JsonResponse('code');
  215.         }else
  216.         {
  217.             return new JsonResponse('Found');
  218.         }
  219.     }
  220.     public function validateTel(Request $request)
  221.     {
  222.         $em $this->getDoctrine()->getManager();
  223.         $user $em->getRepository(User::class)->findOneByTel($request->request->get('tel'));
  224.         if (!$user)
  225.         {
  226.             return new JsonResponse('Not found'404);
  227.         }else
  228.         {
  229.             if($user->getCodeSms() == $request->request->get('code'))
  230.             {
  231.                 $user->setPassword("register");        
  232.                 $em->persist($user);
  233.                 $em->flush();
  234.                 return new JsonResponse('Found');
  235.             }else
  236.             {
  237.                 return new JsonResponse('No match'403);
  238.             }
  239.         }
  240.     }
  241.     public function register(UserPasswordEncoderInterface $passwordEncoderRequest $request)
  242.     {
  243.         $em   $this->getDoctrine()->getManager();
  244.         $user $em->getRepository(User::class)->findOneByTel($request->request->get('tel'));
  245.         if (!$user)
  246.         {
  247.             return new JsonResponse('User not found'404);
  248.         }
  249.         $password               $request->request->get("password");
  250.         $passwordConfirmation   $request->request->get("confirm_password");
  251.         $firstname              $request->request->get("firstname");
  252.         $name                   $request->request->get("name");
  253.         $address                $request->request->get("address");
  254.         $subaddress             $request->request->get("subaddress");
  255.         $cp                     $request->request->get("cp");
  256.         $town                   $request->request->get("town");
  257.         $email                  $request->request->get("email");
  258.         $errors = [];
  259.         if($password != $passwordConfirmation)
  260.         {
  261.             $errors[] = "Le mot de passe et sa confirmation doivent être identique";
  262.         }
  263.         if(strlen($password) < 6)
  264.         {
  265.             $errors[] = "Le mot de passe doit faire minimum 6 caractères";
  266.         }
  267.         if(!$errors)
  268.         {
  269.             $encodedPassword $passwordEncoder->encodePassword($user$password);
  270.             $user->setPassword($encodedPassword);
  271.             $user->setFirstname($firstname);
  272.             $user->setName($name);
  273.             $user->setAddress($address);
  274.             $user->setSubAddress($subaddress);
  275.             $user->setCp($cp);
  276.             $user->setTown($town);
  277.             $user->setEmail($email);
  278.             $user->setRoles(array('ROLE_USER'));
  279.             $user->setApiToken(strtoupper(substr(str_repeat(md5(rand()), ceil(6/32)), 012)));
  280.             try
  281.             {
  282.                 $em->persist($user);
  283.                 $em->flush();
  284.                 return new JsonResponse($user->getApiToken());
  285.             }
  286.             catch(UniqueConstraintViolationException $e)
  287.             {
  288.                 $errors[] = "Adresse Email déjà enregistré !";
  289.             }
  290.             catch(\Exception $e)
  291.             {
  292.                 $errors[] = "Impossible d'enregistrer vos informations, réessayer ultérieurement.";
  293.             }
  294.         }
  295.         return new JsonResponse($errors400);
  296.     }
  297.     public function profile()
  298.     {
  299.         return $this->json([
  300.             'user' => $this->getUser()
  301.         ]);
  302.     }
  303.     public function getIntervention(Request $request)
  304.     {
  305.         if(!$this->isGranted('ROLE_USER'))
  306.         {
  307.             return new JsonResponse("Forbidden"403);
  308.         }
  309.         $em $this->getDoctrine()->getManager();
  310.         $user $em->getRepository(User::class)->findOneByTel($request->request->get('tel'));
  311.         $interventions $em->getRepository(Intervention::class)->findBy(array("user_id" => $user->getId()));
  312.         $interv_cleaned = [];
  313.         foreach ($interventions as $k => $v)
  314.         {
  315.             $tmp["type"]    = $v->getType();
  316.             $tmp["date"]    = $v->getDate();
  317.             $tmp["address"] = $v->getAddress();
  318.             $tmp["cp"]      = $v->getCp();
  319.             $tmp["town"]    = $v->getTown();
  320.             array_push($interv_cleaned$tmp);
  321.         }
  322.         return new JsonResponse($interv_cleaned);
  323.     }
  324.     public function sendEmail(Request $request)
  325.     {
  326.         $type                   $request->request->get('type');
  327.         $client_type            $request->request->get('client_type');
  328.         $client_chaudiere       $request->request->get('client_chaudiere');
  329.         $address                $request->request->get('client_address');
  330.         $sub_address            $request->request->get('client_subaddress');
  331.         $cp                     $request->request->get('client_cp');
  332.         $town                   $request->request->get('client_town');
  333.         $property_type          $request->request->get('client_property_type');
  334.         $room_type              $request->request->get('client_room_type');
  335.         $fuite_type             $request->request->get('client_fuite_type');
  336.         $more_info              $request->request->get('client_fuite_info');
  337.         $date                   $request->request->get('client_date');
  338.         $price                  $request->request->get('price');
  339.         $email                  $request->request->get('email');
  340.         $paiementMethod         $request->request->get('method');
  341.         $attachments = array();
  342.         $attachments[] = array(
  343.             'ContentType'   => "text/plain",
  344.             'Filename'      => "photo1.jpg",
  345.             'Base64Content' => $request->request->get('pic1')
  346.         );
  347.         $attachments[] = array(
  348.             'ContentType'   => "text/plain",
  349.             'Filename'      => "photo2.jpg",
  350.             'Base64Content' => $request->request->get('pic2')
  351.         );
  352.         $attachments[] = array(
  353.             'ContentType'   => "text/plain",
  354.             'Filename'      => "photo3.jpg",
  355.             'Base64Content' => $request->request->get('pic3')
  356.         );
  357.         $em   $this->getDoctrine()->getManager();
  358.         $user $em->getRepository(User::class)->findOneByTel($request->request->get('tel'));
  359.         $intervention = new Intervention();
  360.         $intervention->setDate($date);
  361.         $intervention->setType($type);
  362.         $intervention->setPropertyType($property_type);
  363.         $intervention->setRoomType($room_type);
  364.         $intervention->setFuiteType($fuite_type);
  365.         $intervention->setMoreInfo($more_info);
  366.         $intervention->setPrice($price);
  367.         $intervention->setUserId($user->getId());
  368.         $intervention->setClientType($client_type);
  369.         $intervention->setPaiementMethod($paiementMethod);
  370.         $intervention->setAddress($address);
  371.         $intervention->setSubaddress($sub_address);
  372.         $intervention->setCp($cp);
  373.         $intervention->setTown($town);
  374.         $em->persist($intervention);
  375.         $em->flush();
  376.         if ($this->getParameter('kernel.environment') == 'prod')
  377.         {
  378.             $email 'protechservicegrandest@gmail.com';
  379.            // $email = 'alexandre.geng@gmail.com';
  380.         }else
  381.         {
  382.             $email 'alexandre.geng@gmail.com';
  383.         }
  384.         if ($type == "J'ai une fuite !")
  385.         {
  386.             $template "<html>
  387.                         <head>
  388.                         <title>Blue Stork</title>
  389.                         </head>
  390.                         <body>
  391.                         <p>Nature de la demande : ".$type."</p>
  392.                         <br>
  393.                         <p>Prénom et nom : ".$user->getFirstname()." ".$user->getName()."</p>
  394.                         <br>
  395.                         <p>Email : ".$user->getEmail()."</p>
  396.                         <br>
  397.                         <p>Télépone : ".$user->getTel()."</p>
  398.                         <br>
  399.                         <p>Demande venant d'un ".$client_type."</p>
  400.                         <br>
  401.                         <p>Adresse : ".$address."</p>
  402.                         <p>Supplément d'adresse : ".$sub_address."</p>
  403.                         <p>Code postal : ".$cp."</p>
  404.                         <p>Ville : ".$town."</p>
  405.                         <br>
  406.                         <p>Type de bien : ".$property_type."</p>
  407.                         <br>
  408.                         <p>Pièce : ".$room_type."</p>
  409.                         <br>
  410.                         <p>Type de fuite : ".$fuite_type."</p>
  411.                         <br>
  412.                         <p>Informations supplémentaire : ".$more_info."</p>
  413.                         <br>
  414.                         <p>Date : ".$date."</p>
  415.                         <br>
  416.                         <p>Prix : ".$price."</p>
  417.                         <br>
  418.                         <p>Méthode de paiement : ".$paiementMethod."</p>
  419.                         </body>
  420.                         </html>
  421.                     ";
  422.         }else
  423.         {
  424.             $template "<html>
  425.                         <head>
  426.                         <title>Blue Stork</title>
  427.                         </head>
  428.                         <body>
  429.                         <p>Nature de la demande : ".$type."</p>
  430.                         <br>
  431.                         <p>Prénom et nom : ".$user->getFirstname()." ".$user->getName()."</p>
  432.                         <br>
  433.                         <p>Email : ".$user->getEmail()."</p>
  434.                         <br>
  435.                         <p>Télépone : ".$user->getTel()."</p>
  436.                         <br>
  437.                         <p>Type de chaudière : ".$client_chaudiere."</p>
  438.                         <br>
  439.                         <p>Adresse : ".$address."</p>
  440.                         <p>Supplément d'adresse : ".$sub_address."</p>
  441.                         <p>Code postal : ".$cp."</p>
  442.                         <p>Ville : ".$town."</p>
  443.                         <br>
  444.                         <p>Type de bien : ".$property_type."</p>
  445.                         <br>
  446.                         <p>Pièce : ".$room_type."</p>
  447.                         <br>
  448.                         <p>Informations supplémentaire : ".$more_info."</p>
  449.                         <br>
  450.                         <p>Date : ".$date."</p>
  451.                         <br>
  452.                         <p>Prix : ".$price."</p>
  453.                         <br>
  454.                         <p>Méthode de paiement : ".$paiementMethod."</p>
  455.                         </body>
  456.                         </html>
  457.                     ";
  458.         }
  459.         $mj = new \Mailjet\Client('b024e9db9ed72cb26f5e3dec34fa2be5','7f8c4d3ba3b4c16b2204e9fa094ae29e',true,['version' => 'v3.1']);
  460.         $body = [
  461.             'Messages' => [
  462.                 [
  463.                     'From' => [
  464.                         'Email' => "developpement@bluestork.fr",
  465.                         'Name' => "Blue Stork"
  466.                     ],
  467.                     'To' => [
  468.                         [
  469.                             'Email' => "protechservicegrandest@gmail.com",
  470.                             'Name' => "protechservicegrandest@gmail.com"
  471.                         ]
  472.                     ],
  473.                     'Subject' => "Demande d'intervention Blue Stork",
  474.                     'TextPart' => "Demande d'intervention Blue Stork",
  475.                     'HTMLPart' => $template,
  476.                     'CustomID' => "Blue Stork",
  477.                     'Attachments' => $attachments
  478.                 ]
  479.             ]
  480.         ];
  481.         $mj = new \Mailjet\Client('b024e9db9ed72cb26f5e3dec34fa2be5','7f8c4d3ba3b4c16b2204e9fa094ae29e',true,['version' => 'v3.1']);
  482.         $body = [
  483.             'Messages' => [
  484.                 [
  485.                     'From' => [
  486.                         'Email' => "developpement@bluestork.fr",
  487.                         'Name' => "Blue Stork"
  488.                     ],
  489.                     'To' => [
  490.                         [
  491.                             'Email' => "alexandre.geng@gmail.com",
  492.                             'Name' => "alexandre.geng@gmail.com"
  493.                         ]
  494.                     ],
  495.                     'Subject' => "Demande d'intervention Blue Stork",
  496.                     'TextPart' => "Demande d'intervention Blue Stork",
  497.                     'HTMLPart' => $template,
  498.                     'CustomID' => "Blue Stork",
  499.                     'Attachments' => $attachments
  500.                 ]
  501.             ]
  502.         ];
  503.         if ($this->getParameter('kernel.environment') == 'prod')
  504.         {
  505.             $response $mj->post(Resources::$Email, ['body' => $body]);
  506.             $response->success();
  507.             $r_data $response->getData();
  508.             if($r_data["Messages"][0]["Status"] == "success")
  509.             {
  510.                 return new JsonResponse('Email sent');
  511.             }else
  512.             {
  513.                 return new JsonResponse('Email fail');
  514.             }
  515.         }else
  516.         {
  517.             $response $mj->post(Resources::$Email, ['body' => $body]);
  518.             $response->success();
  519.             $r_data $response->getData();
  520.             return new JsonResponse($r_data);
  521.         }
  522.     }
  523.     public function stripeIntent(Request $request)
  524.     {
  525.         //sk_test_51KC50gEuum09L1EbWDlhU6XkukgvPw3ntiKwJptKxX9rQCoXvB2Vzu7NoJl473kedV1qpNFcP1ZnGAKA1fKyCWD80091ZF0rgq
  526.         //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
  527.         \Stripe\Stripe::setApiKey('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');
  528.         $paymentIntent = \Stripe\PaymentIntent::create([
  529.             'amount' => $request->request->get('price')*100,
  530.             'currency' => 'eur',
  531.         ]);
  532.         $output = [
  533.             'clientSecret' => $paymentIntent->client_secret,
  534.         ];
  535.         return new JsonResponse($output);
  536.     }
  537.     public function registerPayment(Request $request)
  538.     {
  539.         $em         $this->getDoctrine()->getManager();
  540.         $user $em->getRepository(User::class)->findOneByTel($request->request->get('tel'));
  541.         $payment    = new Payment();
  542.         $date       = new \DateTime();
  543.         $payment->setUserId($user->getId());
  544.         $payment->setStriperesult(json_encode($request->request->get('paymentid')));
  545.         $payment->setDate($date->format("Y-m-d H:i:s"));
  546.         $em->persist($payment);
  547.         $em->flush();
  548.         return new JsonResponse(["transaction"=> $request->request->get('paymentid')]);
  549.     }
  550.     public function getInvalid(Request $request)
  551.     {
  552.         $em         $this->getDoctrine()->getManager();
  553.         $query $em->createQuery("SELECT p FROM App\Entity\Intervention p ORDER BY p.date ASC");
  554.         $allResa $query->getResult();
  555.         $invalid        = array();
  556.         $formatInvalid  = array();
  557.         $bainsCD        = array();
  558.         foreach ($allResa as $k=>$v)
  559.         {
  560.             $date           $v->getDate();
  561.             $start  date('Y-d-m H:i:s',strtotime('-1 minutes',strtotime($date)));
  562.             $end    date('Y-d-m H:i:s',strtotime('+1 minutes',strtotime($date)));
  563.             $format_invalid["start"]    = date(DATE_ISO8601strtotime($start));
  564.             $format_invalid["end"]      = date(DATE_ISO8601strtotime($end));
  565.             array_push($invalid$format_invalid);
  566.             
  567.         }
  568.         return new JsonResponse($invalid);
  569.     }
  570. }