vendor\uvdesk\core-framework\Providers\UserProvider.php line 86

Open in your IDE?
  1. <?php
  2. namespace Webkul\UVDesk\CoreFrameworkBundle\Providers;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Symfony\Component\HttpFoundation\RequestStack;
  5. use Symfony\Component\DependencyInjection\ContainerInterface;
  6. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  7. use Webkul\UVDesk\CoreFrameworkBundle\Entity\User;
  8. use Webkul\UVDesk\CoreFrameworkBundle\Entity\UserInstance;
  9. use Symfony\Component\Security\Core\User\UserInterface;
  10. use Symfony\Bundle\SecurityBundle\Security\FirewallMap;
  11. use Symfony\Component\Security\Core\User\UserProviderInterface;
  12. use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
  13. use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
  14. use Webkul\UVDesk\CoreFrameworkBundle\Services\ReCaptchaService;
  15. class UserProvider implements UserProviderInterface
  16. {
  17.     private $firewall;
  18.     private $container;
  19.     private $requestStack;
  20.     private $entityManager;
  21.     private $session;
  22.     private $recaptchaService;
  23.     public function __construct(FirewallMap $firewallContainerInterface $containerRequestStack $requestStackEntityManagerInterface $entityManagerSessionInterface $sessionReCaptchaService $recaptchaService)
  24.     {
  25.         $this->firewall $firewall;
  26.         $this->container $container;
  27.         $this->requestStack $requestStack
  28.         $this->entityManager $entityManager;
  29.         $this->session $session;
  30.         $this->recaptchaService $recaptchaService;
  31.     }
  32.     public function loadUserByUsername($username)
  33.     {
  34.         $request $this->requestStack->getCurrentRequest();
  35.         $recaptchaDetails $this->recaptchaService->getRecaptchaDetails();
  36.         if (
  37.             $request->getMethod() == 'POST' &&  $recaptchaDetails && $recaptchaDetails->getIsActive() == true 
  38.             && ($request->attributes->get('_route') == 'helpdesk_member_handle_login' || $request->attributes->get('_route') == 'helpdesk_customer_login'
  39.             && $this->recaptchaService->getReCaptchaResponse($request->request->get('g-recaptcha-response'))
  40.         ) {
  41.             $this->session->getFlashBag()->add('warning',"Warning ! Please select correct CAPTCHA or login again with correct CAPTCHA !");
  42.             throw new UsernameNotFoundException('Please select correct CAPTCHA for'.$username);
  43.         } else {
  44.             $queryBuilder $this->entityManager->createQueryBuilder()
  45.                 ->select('user, userInstance')
  46.                 ->from(User::class, 'user')
  47.                 ->leftJoin(UserInstance::class, 'userInstance''WITH''user.id = userInstance.user')
  48.                 ->leftJoin('userInstance.supportRole''supportRole')
  49.                 ->where('user.email = :email')->setParameter('email'trim($username))
  50.                 ->andWhere('userInstance.isActive = :isActive')->setParameter('isActive'true)
  51.                 ->setMaxResults(1)
  52.             ;
  53.             // Retrieve user instances based on active firewall
  54.             $activeFirewall $this->firewall->getFirewallConfig($this->requestStack->getCurrentRequest())->getName();
  55.             switch (strtolower($activeFirewall)) {
  56.                 case 'member':
  57.                 case 'back_support':
  58.                     $queryBuilder
  59.                         ->andWhere('supportRole.code = :roleOwner OR supportRole.code = :roleAdmin OR supportRole.code = :roleAgent')
  60.                         ->setParameter('roleOwner''ROLE_SUPER_ADMIN')
  61.                         ->setParameter('roleAdmin''ROLE_ADMIN')
  62.                         ->setParameter('roleAgent''ROLE_AGENT')
  63.                     ;
  64.                     break;
  65.                 case 'customer':
  66.                 case 'front_support':
  67.                     $queryBuilder
  68.                         ->andWhere('supportRole.code = :roleCustomer')
  69.                         ->setParameter('roleCustomer''ROLE_CUSTOMER')
  70.                     ;
  71.                     break;
  72.                 default:
  73.                     throw new UsernameNotFoundException('Firewall not supported.');
  74.                     break;
  75.             }
  76.         
  77.             $response $queryBuilder->getQuery()->getResult();
  78.             try {
  79.                 if (!empty($response) && is_array($response)) {
  80.                     list($user$userInstance) = $response;
  81.                     // Set currently active instance
  82.                     $user->setCurrentInstance($userInstance);
  83.                     $user->setRoles((array) $userInstance->getSupportRole()->getCode());
  84.                     return $user;
  85.                 }
  86.             } catch (\Exception $e) {
  87.                 // Do nothing...
  88.             }
  89.             throw new UsernameNotFoundException(sprintf('Username "%s" does not exist.'$username));
  90.         }
  91.     }
  92.     public function refreshUser(UserInterface $user)
  93.     {
  94.         
  95.         if ($this->supportsClass(get_class($user))) {
  96.             return $this->loadUserByUsername($user->getEmail());
  97.         }
  98.         throw new UnsupportedUserException('Invalid user type');
  99.     }
  100.     public function supportsClass($class)
  101.     {
  102.         return User::class === $class;
  103.     }
  104. }