src/Controller/SecurityController.php line 54

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  7. use App\Repository\CompanyRepository;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use App\Entity\Company;
  10. use App\Utils\UserManageHelper;
  11. use Symfony\Component\HttpFoundation\JsonResponse;
  12. use Symfony\Contracts\Translation\TranslatorInterface;
  13. use App\Entity\User;
  14. use App\Utils\MailSpool;
  15. use Doctrine\ORM\EntityManagerInterface;
  16. use App\Repository\CompanySettingsRepository;
  17. use App\Entity\CompanySettings;
  18. use App\Utils\CompanyHelper;
  19. use App\Utils\FormBuilder;
  20. use App\Entity\TcUserType;
  21. use Symfony\Component\DependencyInjection\ContainerInterface;
  22. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  23. use App\Entity\CompanyUser;
  24. use App\Utils\LtsUtils;
  25. class SecurityController extends AbstractController
  26. {
  27.     private $CompanyRepository;
  28.     private $translator;
  29.     private $mailSpool;
  30.     private $em;
  31.     private $passwordHasher;
  32.     /**
  33.      * @var Container
  34.      */
  35.     public $container;
  36.     public function __construct(CompanyRepository $CompanyRepositoryMailSpool $mailSpoolEntityManagerInterface $entityManagerTranslatorInterface $translatorUserPasswordHasherInterface $passwordHasher)
  37.     {
  38.         $this->em $entityManager;
  39.         $this->CompanyRepository $CompanyRepository;
  40.         $this->translator $translator;
  41.         $this->passwordHasher $passwordHasher;
  42.     }
  43.     /**
  44.      * @Route("/login", name="app_login")
  45.      * User login 
  46.      * @param AuthenticationUtils $authenticationUtils
  47.      * @return 
  48.      */
  49.     public function login(AuthenticationUtils $authenticationUtils): Response
  50.     {
  51.         if ($this->getUser()) {
  52.             return $this->redirectToRoute('board_view', ["boardIdentifier" => '0']);
  53.         }
  54.         // get the login error if there is one
  55.         $error $authenticationUtils->getLastAuthenticationError();
  56.         // last username entered by the user
  57.         $lastUsername $authenticationUtils->getLastUsername();
  58.         return $this->render('security/signin.html.twig', ['last_username' => $lastUsername'error' => $error]);
  59.     }
  60.     /**
  61.      * @Route("/logout", name="app_logouts")
  62.      */
  63.     public function logout()
  64.     {
  65.         //throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
  66.     }
  67.     /**
  68.      * save invite user details
  69.      * @param Request $request,UserManageHelper $userManageHelper
  70.      * @return JsonResponse
  71.      */
  72.     public function userRegistration(Request $requestUserManageHelper $userManageHelperCompanyHelper $CompanyHelperContainerInterface $container nullFormBuilder $formBuilder)
  73.     {
  74.         $data '';
  75.         $postData $request->get('formdata');
  76.         $recaptcha $postData['g-recaptcha-response'];
  77.         $secret_key $container->getParameter('recaptcha_saas_secret');
  78.         $url 'https://www.google.com/recaptcha/api/siteverify?secret=' $secret_key '&response=' $recaptcha;
  79.         $response file_get_contents($url);
  80.         $response json_decode($response);
  81.         if ($response->success != true) {
  82.             return new JsonResponse(array('msg' => 'verify the recaptcha''status' => 'error'));
  83.         }
  84.         if (empty($postData['company_id'])) {
  85.             $postData['plan_validity'] = $container->getParameter('plan_validity');
  86.             $companyData $CompanyHelper->createCompany($postData);
  87.             $postData['company_id'] = $companyData['companyId'];
  88.             $postData['user_type'] = $companyData['adminUserTypeId'];
  89.             $postData['reg_type'] = "user_registration";
  90.             $userTypeObj $this->em->getRepository(TcUserType::class)->find($companyData['adminUserTypeId']);
  91.         } else {
  92.             $postData['reg_type'] = "user_invite_registration";
  93.             $userTypeObj $this->em->getRepository(TcUserType::class)->find($postData['user_type']);
  94.             // Restriction for user create according to plans
  95.             $noOfUsers $this->em->getRepository(CompanySettings::class)->getDefaultUserByCompanyId($postData['company_id']);
  96.             $userCount $this->em->getRepository(CompanyUser::class)->getUserCountByCompanyId($postData['company_id']);
  97.             if ($noOfUsers <  $userCount) {
  98.                 return new JsonResponse(array('message' => $this->translator->trans('SIGN_UP_PLAN_LIMIT_WARNING'), 'status' => 'limitExceeded'));
  99.             }
  100.         }
  101.         if (isset($postData['invite_id']) && $postData['invite_id'] !== '') { // If invited user
  102.             $postData['is_verified'] = 1;
  103.         }
  104.         $postData['roles'] = json_decode($userTypeObj->getRoles());
  105.         if (!empty($postData)) {
  106.             $data $userManageHelper->signUpUser($postData);
  107.             $postData['userId'] = $data['userId'];
  108.             // Create default layout
  109.             if ($postData['reg_type'] == "user_registration") {
  110.                 $formBuilder->createDefaultFormLayout($postData);
  111.             }
  112.         }
  113.         return new JsonResponse(array('msg' => $this->translator->trans('USER_ADDED_SUCCESS_MSG'), 'data' => $data'status' => 'success'));
  114.     }
  115.     /**
  116.      * To send mail by $mailLogId from route path
  117.      * @param type $mailLogId
  118.      * @param MailSpool $mailSpool
  119.      * @return JsonResponse
  120.      */
  121.     public function sendMailAction($mailLogIdMailSpool $mailSpoolRequest $request)
  122.     {
  123.         $mailLogIdArray $request->get('mailLogIds');
  124.         if (!empty($mailLogId) && !$mailLogId == 0) {
  125.             $mailSpool->sendFromSpool($mailLogId);
  126.         }
  127.         if (!empty($mailLogIdArray)) {
  128.             $mailSpool->sendFromSpool($mailLogId);
  129.         }
  130.         return new JsonResponse(array('msg' => $mailLogId ' - Mail sent!!''status' => 'success'));
  131.     }
  132.     /**
  133.      * Method signupVerificationAction
  134.      *
  135.      * @param int $userId
  136.      * @param Request $request
  137.      *
  138.      * @return void
  139.      */
  140.     public function signupVerificationAction($userIdRequest $request)
  141.     {
  142.         $userId $userId;
  143.         $data $this->em->getRepository(User::class)->getUserDetailsById($userId);
  144.         return $this->render('security/verification.html.twig', ['data' => $data]);
  145.     }
  146.     /**
  147.      * function for terms and conditions
  148.      * @param 
  149.      * @return 
  150.      */
  151.     public function termsAndConditions()
  152.     {
  153.         return $this->render('security/terms_conditions.html.twig');
  154.     }
  155.     /**
  156.      * Method privacyPolicy
  157.      *
  158.      * @return void
  159.      */
  160.     public function privacyPolicy()
  161.     {
  162.         return $this->render('security/privacy_policy.html.twig');
  163.     }
  164.     /**
  165.      * Method endUserLicenseAgreement
  166.      *
  167.      * @return void
  168.      */
  169.     public function endUserLicenseAgreement()
  170.     {
  171.         return $this->render('security/end_user_license_agreement.html.twig');
  172.     }
  173.     /**
  174.      * Method saveNewUserPassword
  175.      *
  176.      * @param Request $request
  177.      *
  178.      * @return void
  179.      */
  180.     public function saveNewUserPassword(Request $request)
  181.     {
  182.         $details $request->get('formData');
  183.         $params $details['setPassword'];
  184.         $user $this->em->getRepository(User::class)->findOneBy([
  185.             'id' => $params['userId'],
  186.         ]);
  187.         $params['loginUserId'] = $params['userId'];
  188.         $params['password'] = $this->passwordHasher->hashPassword($user$params['password']);
  189.         $this->em->getRepository(User::class)->save($params$params['userId']);
  190.         return new JsonResponse(['msg' => $this->translator->trans('PROFILE_UPDATED'), 'status' => 'success']);
  191.     }
  192.     /**
  193.      * Method checkUserEmail - to check for any existing users
  194.      * @param Request $request
  195.      * @return JsonResponse
  196.      */
  197.     public function checkUserEmail(Request $requestUserManageHelper $userManageHelper)
  198.     {
  199.         $email $request->get('email');
  200.         $checkEmail $this->em->getRepository(User::class)->isUserExist($email);
  201.         if ($checkEmail) {
  202.             return new JsonResponse(array('status' => 'error''msg' => $this->translator->trans('ALREADY_EXISTS')));
  203.         } else {
  204.             return new JsonResponse(array('status' => 'success''result' => 'ok''valid' => true));
  205.         }
  206.     }
  207.     /**
  208.      * Method checkInvalidEmail - to restrict unwanted mail-ids
  209.      * @param Request $request
  210.      * @return JsonResponse
  211.      */
  212.     public function checkInvalidEmail(Request $requestUserManageHelper $userManageHelper)
  213.     {
  214.         $invalidEmails $userManageHelper->getInvalidEmails();
  215.         $email $request->get('inv-email');
  216.         $emailSuffix substr($emailstrpos($email"@") + 1);
  217.         if (in_array($emailSuffix$invalidEmails)) {
  218.             return new JsonResponse(array('status' => 'error''msg' => $this->translator->trans('EMAIL_VALIDATION')));
  219.         } else {
  220.             return new JsonResponse(array('status' => 'success''result' => 'ok''valid' => true));
  221.         }
  222.     }
  223.      /**
  224.      * Method organisationEmailEditCheck - to validate the email for existing users during email edit in organisation
  225.      * @param Request $request
  226.      * @return JsonResponse
  227.      */
  228.     public function organisationEmailEditCheck(Request $request)
  229.     {
  230.         $params['email'] = $request->get('email');
  231.         $params['userId'] = $request->get('id');
  232.         $checkEmail $this->em->getRepository(User::class)->isUserMailEditCheck($params);
  233.         if ($checkEmail) {
  234.             return new JsonResponse(array('status' => 'error''msg' => $this->translator->trans('ALREADY_EXISTS')));
  235.         } else {
  236.             return new JsonResponse(array('status' => 'success''result' => 'ok''valid' => true));
  237.         }
  238.     }
  239. }