src/webkul/uvdesk/api-bundle/Providers/ApiCredentials.php line 20

Open in your IDE?
  1. <?php
  2. namespace Webkul\UVDesk\ApiBundle\Providers;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Webkul\UVDesk\CoreFrameworkBundle\Entity\User;
  5. use Webkul\UVDesk\CoreFrameworkBundle\Entity\UserInstance;
  6. use Symfony\Component\HttpFoundation\RequestStack;
  7. use Symfony\Bundle\SecurityBundle\Security\FirewallMap;
  8. use Symfony\Component\Security\Core\User\UserInterface;
  9. use Symfony\Component\DependencyInjection\ContainerInterface;
  10. use Symfony\Component\Security\Core\User\UserProviderInterface;
  11. use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
  12. use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
  13. class ApiCredentials implements UserProviderInterface
  14. {
  15. public function __construct(FirewallMap $firewall, ContainerInterface $container, RequestStack $requestStack, EntityManagerInterface $entityManager)
  16. {
  17. $this->firewall = $firewall;
  18. $this->container = $container;
  19. $this->requestStack = $requestStack;
  20. $this->entityManager = $entityManager;
  21. }
  22. public function loadUserByUsername($username)
  23. {
  24. $queryBuilder = $this->entityManager->createQueryBuilder()
  25. ->select('user, userInstance')
  26. ->from(User::class, 'user')
  27. ->leftJoin(UserInstance::class, 'userInstance', 'WITH', 'user.id = userInstance.user')
  28. ->leftJoin('userInstance.supportRole', 'supportRole')
  29. ->where('user.email = :email')->setParameter('email', trim($username))
  30. ->andWhere('userInstance.isActive = :isActive')->setParameter('isActive', true)
  31. ->andWhere('supportRole.id = :roleOwner OR supportRole.id = :roleAdmin OR supportRole.id = :roleAgent')
  32. ->setParameter('roleOwner', 1)
  33. ->setParameter('roleAdmin', 2)
  34. ->setParameter('roleAgent', 3)
  35. ->setMaxResults(1)
  36. ;
  37. $response = $queryBuilder->getQuery()->getResult();
  38. try {
  39. if (!empty($response) && is_array($response)) {
  40. list($user, $userInstance) = $response;
  41. // Set currently active instance
  42. $user->setCurrentInstance($userInstance);
  43. $user->setRoles((array) $userInstance->getSupportRole()->getCode());
  44. return $user;
  45. }
  46. } catch (\Exception $e) {
  47. // Do nothing...
  48. }
  49. throw new UsernameNotFoundException(sprintf('Username "%s" does not exist.', $username));
  50. }
  51. public function refreshUser(UserInterface $user)
  52. {
  53. if ($this->supportsClass(get_class($user))) {
  54. return $this->loadUserByUsername($user->getEmail());
  55. }
  56. throw new UnsupportedUserException('Invalid user type');
  57. }
  58. public function supportsClass($class)
  59. {
  60. return User::class === $class;
  61. }
  62. }