src/Globals/CoreBundle/Controller/SecurityController.php line 54

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  * User: xfloyd
  5.  * Date: 9/9/2015
  6.  * Time: 4:57 PM
  7.  */
  8. namespace Globals\CoreBundle\Controller;
  9. use Cassandra\Exception\TruncateException;
  10. use Globals\MailManagementBundle\Entity\Mail;
  11. use Globals\CoreBundle\Entity\ResourceSmsSent;
  12. use Globals\MailManagementBundle\Entity\MailRecipient;
  13. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  14. //use \Globals\ResourceManagementBundle\Services\SLogger;
  15. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\JsonResponse;
  18. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  19. use Symfony\Component\HttpFoundation\Session\Session;
  20. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  21. use Symfony\Component\Security\Core\Exception\AuthenticationException;
  22. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  23. use Globals\CoreBundle\Services\SendMessageService;
  24. use Twilio\Rest\Client;
  25. use Globals\ResourceManagementBundle\Entity\Resource;
  26. class SecurityController extends Controller
  27. {
  28.     /**
  29.      * Log Error/Status Messages to predefined file location
  30.      *
  31.      * @param $str
  32.      */
  33.     function log($str)
  34.     {
  35.         $file_path "/tmp/slogger_output.txt";
  36.         if (!file_exists($file_path)) {
  37.             $fh fopen($file_path'w');
  38.         } else {
  39.             $fh fopen($file_path'a');
  40.         }
  41.         fwrite($fhprint_r($strtrue) . "\n");
  42.         fclose($fh);
  43.     }
  44.     /**
  45.      * @Route("/")
  46.      * @Route("/login", name="login")
  47.      */
  48.     public function loginAction(Request $request)
  49.     {
  50.         if ($this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY') && !$request->isXmlHttpRequest()) {
  51.             /**
  52.              * Used to load this Resource's "NumPerPage" Setting,
  53.              * into the session, to be used on all datatables
  54.              */
  55.             $user $this->container->get("security.token_storage")->getToken()->getUser();
  56.             if (!is_scalar($user) && get_class($user) == "Globals\\ResourceManagementBundle\\Entity\\Resource") {
  57.                 $session = new Session();
  58.                 $session->set("NumPerPage"10);
  59.             }
  60.             return $this->redirect($this->generateUrl('globals_claimmanagement_claimintakecontainer_mainactivity')); // secure_homepage
  61.         }
  62.         try {
  63.             $this->getDoctrine()->getConnection()->connect();
  64.         } catch (\Exception $e) {
  65.             // failed to connect time to go to the main landing page where you can select your customer ID
  66.             return $this->render('CoreBundle:Default:index.html.twig');
  67.         }
  68.         return $this->render('@Core/Default/login_base.html.twig', ['IS_MODAL' => $request->isXmlHttpRequest()]);
  69.     }
  70.     /**
  71.      * @Route("/savesmsresponse")
  72.      */
  73.     public function saveSmsResponse(Request $request)
  74.     {
  75.         // header("content-type: text/xml");
  76.         // $response = new MessagingResponse();
  77.         // $response->message(
  78.         //   "I'm using the Twilio PHP library to respond to this SMS!"
  79.         //  );
  80.         $em $this->container->get("doctrine.orm.entity_manager");
  81.         $twilioresponse json_decode($_REQUEST,true);
  82.         file_put_contents("test.txt",$_REQUEST);
  83.         $messageId $twilioresponse['sid'];
  84.         $messageStatus  $twilioresponse['status'];
  85.         $objSmsInfo =  $em->getRepository("CoreBundle:ResourceSmsSent")->findOneBy(array('smsId'=> $messageId));
  86.         $objSmsInfo->setSmsSentStatus($messageStatus);
  87.         $em->persist($objSmsInfo);
  88.         $em->flush();
  89.         $response 'success';
  90.         return new JsonResponse($response);
  91.         // echo $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST'].
  92.         //  $_SERVER['PHP_SELF'];
  93.         //  dd($_SERVER);
  94.         //  die("dfdfdf");
  95.     }
  96.     /**
  97.      * @Route("/smsvalidate")
  98.      */
  99.     public function smsValidate(Request $request)
  100.     {
  101.          //return $this->redirect($this->generateUrl('globals_claimmanagement_claimintakecontainer_mainactivity')); // secure_homepage
  102.         //$phone_number_only = '+13109895228';
  103.         //$client = new Client('ACd025cc7fe51bd8f5ad59f7aaccaf0446', '73344d257e7d5313e2c89543a99e2d1b');
  104.         //$sms = $client->messages->create(
  105.            // $phone_number_only, // to
  106.            // [
  107.            //     "body" => 'Dear MO, 100000 has been deposited in to your account.But total amount will not change', // message contents
  108.                // "from" => "+17405737242" // from number
  109.            // ]
  110.       //  );
  111.         $em $this->container->get("doctrine.orm.entity_manager");
  112.         $resource $em->getRepository("ResourceManagementBundle:Resource")->find(base64_decode(urldecode($_GET['id'])));
  113.         $objSmsInfo =  $em->getRepository("CoreBundle:ResourceSmsSent")->findOneBy(array('userId'=> base64_decode(urldecode($_GET['id'])),'isActive'=>'Y'),
  114.             array('id' => 'DESC'));
  115.         $smsSentTimeDiff 0;
  116.         if(!empty($objSmsInfo)) {
  117.             $smsSentTime strtotime($objSmsInfo->getSentOn()->format('Y-m-d H:i:s'));
  118.             $currentTime strtotime(date('Y-m-d H:i:s'));
  119.             $smsSentTimeDiff =  $currentTime $smsSentTime;
  120.         }
  121.         return $this->render('@Core/Default/sms_validate.html.twig', ['IS_MODAL' => $request->isXmlHttpRequest(),'smsSentMobileNO'=>$resource->getMobilePhone(),'userId'=>$resource->getId(),'smsSentTimeDiff'=>$smsSentTimeDiff,'counterTot'=>180]);
  122.     }
  123.     /**
  124.      * @Route("/")
  125.      * @Route("/get_auth_info", name="get_auth_info")
  126.      */
  127.     public function getAuthInfoAction(Request $request)
  128.     {
  129.         $em $this->container->get("doctrine.orm.entity_manager");
  130.         $auth_code $request->request->get("auth_code");
  131.         $userId$request->request->get("userId");
  132.         $validsms $em->getRepository("CoreBundle:ResourceSmsSent")->findBy(array("smsStatus" => array('sent','wrong1','wrong2'),'isActive'=>'Y',"userId"=> $userId),
  133.             array('id' => 'DESC'));
  134.         if(!empty($validsms) && $auth_code==$validsms[0]->getSmsCode()) {
  135.             $validsms[0]->setSmsStatus('validated');
  136.             $em->persist($validsms[0]);
  137.             $em->flush();
  138.             $objResource $em->getRepository("ResourceManagementBundle:Resource")->findOneBy([
  139.                 "id" => $userId,
  140.                 "isActive" => 1
  141.             ]);
  142.             $userRole $objResource->getRoles();
  143.             if (in_array('ROLE_REGISTERED',$userRole )) {
  144.                 return new JsonResponse($this->generateUrl('globals_resourcemanagement_resource_resources2'). '#' preg_replace("/^\/(?!app_dev.php)/"""$this->generateUrl('globals_resourcemanagement_resource_editresourceajax', ["id" => $userId])));
  145.             }else{
  146.                 return new JsonResponse(($this->generateUrl('globals_claimmanagement_claimintakecontainer_mainactivity'))); // secure_homepage
  147.                // return new JsonResponse($this->generateUrl('globals_claimmanagement_claimintakecontainer_mainactivity'). '#' . preg_replace("/^\/(?!app_dev.php)/", "", $this->generateUrl('globals_claimmanagement_claimintakefragments_viewmyclaims')));
  148.             }
  149.             //return $this->redirect($this->generateUrl('globals_claimmanagement_claimintakecontainer_mainactivity')); // secure_homepage
  150.         }
  151.         else{
  152.             $validsms $em->getRepository("CoreBundle:ResourceSmsSent")->findOneBy(array('isActive'=>'Y',"userId"=> $userId), array('id' => 'DESC'));
  153.             if($validsms->getSmsStatus()=='sent'){
  154.                    $validsms->setSmsStatus('wrong1');
  155.                 $em->persist($validsms);
  156.                 $em->flush();
  157.                    return new JsonResponse('NOTVALID');
  158.                }
  159.             if($validsms->getSmsStatus()=='wrong1'){
  160.                 $validsms->setSmsStatus('wrong2');
  161.                 $em->persist($validsms);
  162.                 $em->flush();
  163.                 return new JsonResponse('NOTVALID');
  164.             }
  165.             if($validsms->getSmsStatus()=='wrong2'){
  166.                 $validsms->setSmsStatus('wrong3');
  167.                 $em->persist($validsms);
  168.                 $em->flush();
  169.                 return new JsonResponse($this->generateUrl('logout'));
  170.             }
  171.             }
  172.     }
  173.     /**
  174.      * @Route("/")
  175.      * @Route("/resend_auth_code", name="resend_auth_code")
  176.      */
  177.     public function resendAuthCodeAction(Request $request)
  178.     {
  179.         $em $this->container->get("doctrine.orm.entity_manager");
  180.         $userId $request->request->get("userId");
  181.         $callfrm $request->request->get("frm");
  182.         $objSmsInfo $em->getRepository("CoreBundle:ResourceSmsSent")->findOneBy(array('userId' => $userId,'isActive'=>'Y'),
  183.             array('id' => 'DESC'));
  184.         if (!empty($objSmsInfo) && $callfrm!='resend'){
  185.             $objSmsInfo->setSmsStatus('expired');
  186.             $em->persist($objSmsInfo);
  187.             $em->flush();
  188.             return new JsonResponse('Expired');
  189.         }
  190.         $objSmsInfo $em->getRepository("CoreBundle:ResourceSmsSent")->findBy(array('userId' => $userId,'isActive'=>'Y'),
  191.             array('id' => 'DESC'));
  192.         if($callfrm=='resend' && $objSmsInfo[0]->getSmsStatus()!='Sent') {
  193.             $objResInfo $em->getRepository("ResourceManagementBundle:Resource")->findOneBy(array('id' => $userId));
  194.             $messageSendService = new SendMessageService($em);
  195.             $smsArrayData = array();
  196.             $smsArrayData['user_id'] = $userId;
  197.             $smsArrayData['user_mobile_phone'] = $objResInfo->getMobilePhone();
  198.             $messageSendService->sendSMS($smsArrayData);
  199.             return new JsonResponse('Sent');
  200.         }else{
  201.             return new JsonResponse('noSent');
  202.         }
  203.     }
  204.     /**
  205.      * @Route("/login_check", name="login_check")
  206.      */
  207.     public function loginCheckAction()
  208.     {
  209.         // this controller will not be executed,
  210.         // as the route is handled by the Security system
  211.     }
  212.     /**
  213.      * @Route("/check_password", name="check_password")
  214.      */
  215.     public function isPasswordValid(Request $request)
  216.     {
  217.         $response 'error';
  218.         $user false;
  219.         if ($request->isMethod('POST') && $password $request->get('password')) {
  220.             if ($username $this->get('security.token_storage')->getToken()->getUser()->getUsername()) {
  221.                 $em $this->getDoctrine()->getManager();
  222.                 $user $em->getRepository("ResourceManagementBundle:Resource")->findOneBy([
  223.                     "username" => $username,
  224.                     "isActive" => 1
  225.                 ]);
  226.             }
  227.             if ($user
  228.             {
  229.                 // Get the encoder for the users password
  230.                 //$encoder_service = $this->get('security.encoder_factory');
  231.                // $encoder = $encoder_service->getEncoder($user);
  232.                 $passwordService $this->container->get("core.password_validate");
  233.                 if ( $passwordService->passwordIsValidForCurrentUser($password)) {
  234.                     // Password ok
  235.                     $response 'valid';
  236.                 } else {
  237.                     // Password bad
  238.                     $response 'invalid';
  239.                 }
  240.             } else {
  241.                 if ($username $this->get('security.token_storage')->getToken()->getUser()->getUsername()) {
  242.                     $em $this->getDoctrine()->getManager();
  243.                     $query $em->createQuery("SELECT u FROM  \Globals\ResourceManagementBundle\Entity\Resource u WHERE u.username = :username");
  244.                     $query->setParameter('username'$username);
  245.                     $resource $query->getOneOrNullResult();
  246.                 }
  247.                 if ($resource) {
  248.                     // Get the encoder for the users password
  249.                     //$encoder_service = $this->get('security.encoder_factory');
  250.                     // $encoder = $encoder_service->getEncoder($user);
  251.                     $passwordService $this->container->get("core.password_validate");
  252.                     //if ($encoder->isPasswordValid($user->getPassword(), $password, $user->getSalt())) {
  253.                     if ( $passwordService->passwordIsValidForCurrentUser($password)) {
  254.                       
  255.                         // Password ok
  256.                         $response 'valid';
  257.                     } else {
  258.                         // Password bad
  259.                         $response 'invalid';
  260.                     }
  261.                 }
  262.             }
  263.         }
  264.         return new JsonResponse(['response' => $response]);
  265.     }
  266.     /**
  267.      * @Route("/send_forget_password_email", name="send_forget_password_email")
  268.      * @Method({"POST"})
  269.      */
  270.     public function sendForgetPasswordEmailAction(Request $request)
  271.     {
  272.         $user false;
  273.         $forget_password_email $request->request->get('_forget_password_email');
  274.         if ($forget_password_email)
  275.         {
  276.             $em $this->getDoctrine()->getManager();
  277.             $query $em->createQuery("SELECT u FROM \Globals\ResourceManagementBundle\Entity\Resource u WHERE u.email = :email");
  278.             $query->setParameter('email'$forget_password_email);
  279.             $user $query->getOneOrNullResult();
  280.         }
  281.         if ($user && $user_email $user->getEmail()) // let's see if we have the user and the user has an email.
  282.         {
  283.             $x md5(time());
  284.             $y str_split($x16);
  285.             $token $y[0] . date('Hi') . $y[1];
  286.             $user->setPasswordResetToken($token);
  287.             $user->setPasswordChangeDate(new \DateTime());
  288.             $em->persist($user);
  289.             $em->flush();
  290.             $url $this->generateUrl(
  291.                 'password_reset_form',
  292.                 array('password_reset_token' => $token),
  293.                 UrlGeneratorInterface::ABSOLUTE_URL
  294.             );
  295.             $mailer $this->container->get('mail_management.mailer');
  296.             $mailer->setSendingConfig();
  297.             $Mail = new Mail();
  298.             # Recipient
  299.             $Recipient = new MailRecipient();
  300.             $Recipient->setEmail($user_email);
  301.             $Recipient->setDisplayName($user->getFullName());
  302.             $Recipient->setMail($Mail);
  303.             $Recipient->setRecipientId($user->getId());
  304.             $entityName $em->getMetadataFactory()->getMetadataFor(get_class($user))->getName();
  305.             $Recipient->setRecipientType($entityName);
  306.             //$em->persist($Recipient);
  307.             //$em->flush();
  308.             # Adds the single recipient (resource);
  309.             $Mail->addRecipient($Recipient);
  310.             $Mail->setSubject('Forgotten password reset');
  311.             # Finalize the MAIL object
  312.             $Mail->setBody($this->renderView(
  313.                 'CoreBundle:email:forget_password_email.html.twig',
  314.                 array('user' => $user'url' => $url)
  315.             ), 'text/html');
  316.             $mailer->sendEmail($Mail);
  317.             return new JsonResponse(['response' => true]);
  318.         } else {
  319.             return new JsonResponse(['response' => false]);
  320.         }
  321.     }
  322.     /**
  323.      * @Route("/password_reset_form/{password_reset_token}", defaults={"password_reset_token" = 0}, name="password_reset_form")
  324.      */
  325.     public function passwordResetForm(Request $request$password_reset_token)
  326.     {
  327.         $user false;
  328.         $password_reset_token $password_reset_token $password_reset_token $request->request->get('password_reset_token');
  329.         $em $this->getDoctrine()->getManager();
  330.         $query $em->createQuery("SELECT u FROM \Globals\ResourceManagementBundle\Entity\Resource u WHERE u.passwordResetToken = :password_reset_token");
  331.         $query->setParameter('password_reset_token'$password_reset_token);
  332.         $user $query->getOneOrNullResult();
  333.         $reset_token_time str_split($password_reset_token4); //5th segment should be time and we will check if it's 2 hours or less
  334.         if ($request->isMethod('POST'))
  335.         {
  336.             $new_password $request->request->get('new_password');
  337.             if ($new_password)
  338.             {
  339.                 $encoder $this->container->get('security.password_encoder');
  340.                 $encoded $encoder->encodePassword($user$new_password);
  341.                 $user->setPasswordResetToken('');
  342.                 $user->setPassword($encoded);
  343.                 $user->setPasswordChangeDate(new \DateTime());
  344.                 $em->persist($user);
  345.                 $em->flush();
  346.                 return new JsonResponse(['response' => true]);
  347.             }
  348.         } else {
  349.             if ($user && (strtotime($reset_token_time[4]) + 7200 time())) {
  350.                 return $this->render('CoreBundle:Default:password_reset_form.html.twig', array('password_reset_token' => $user->getPasswordResetToken()));
  351.             } else {
  352.                 return $this->render('CoreBundle:Default:index.html.twig');
  353.             }
  354.         }
  355.         return new JsonResponse(['response' => false]);
  356.     }
  357.     /**
  358.      * @Route("/keep_alive", name="keep_alive")
  359.      */
  360.     public function keepAliveAction()
  361.     {
  362.         return new JsonResponse('Alive');
  363.     }
  364.     /**
  365.      *
  366.      * @Route("/forcedpasswordchange", name="forcedpasswordchange")
  367.      */
  368.     public function forcedpasswordchangeAction(Request $request)
  369.     {
  370.        // print_r($request->query->get('id'));
  371.         if ($request->isMethod('POST'))
  372.         {
  373.             //print_r($request->request);
  374.             $user = new Resource();
  375.             $old_password $request->request->get('old_password');
  376.             $new_password $request->request->get('new_password');
  377.             $decoded_id base64_decode(urldecode($request->request->get('_user_token')));
  378.             $em $this->getDoctrine()->getManager();
  379.             $ResourceData $em->getRepository("ResourceManagementBundle:Resource")->findOneBy([
  380.                 "id" => $decoded_id,
  381.                 "isActive" => 1
  382.             ]);
  383.             if(empty($ResourceData)){
  384.                 return new JsonResponse(['response' => false]);
  385.             }
  386.             if ($new_password)
  387.             {
  388.                 $encoder $this->container->get('security.password_encoder');
  389.                 $newEncoded $encoder->encodePassword($user$new_password);
  390.                 $ResourceData->setPasswordResetToken('');
  391.                 $ResourceData->setPassword($newEncoded);
  392.                 $ResourceData->setPasswordChangeDate(new \DateTime());
  393.                 $em->persist($ResourceData);
  394.                 $em->flush();
  395.                 return new JsonResponse(['response' => true]);
  396.             }
  397.         }
  398.         return $this->render('CoreBundle:Default:forced_password_reset_form.html.twig', array("TempId" =>$request->query->get('id') ));
  399.     }
  400. }