CustomOAuthUserProvider.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace Base\OAuthClientBundle\Security\Core\User;
  3. use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface;
  4. use HWI\Bundle\OAuthBundle\Security\Core\User\OAuthUserProvider;
  5. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  6. use Symfony\Component\Security\Core\User\UserInterface;
  7. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
  8. class CustomOAuthUserProvider extends OAuthUserProvider
  9. {
  10. /**
  11. * @var TokenStorage
  12. */
  13. protected $securityTokenStorage;
  14. /**
  15. * @param TokenStorage $securityTokenStorage
  16. */
  17. public function __construct(TokenStorage $securityTokenStorage)
  18. {
  19. $this->securityTokenStorage = $securityTokenStorage;
  20. }
  21. /**
  22. * {@inheritdoc}
  23. */
  24. public function loadUserByUsername($username)
  25. {
  26. return new CustomOAuthUser($username);
  27. }
  28. /**
  29. * {@inheritdoc}
  30. */
  31. public function refreshUser(UserInterface $user)
  32. {
  33. if (!$this->supportsClass(get_class($user))) {
  34. throw new UnsupportedUserException(sprintf('Unsupported user class "%s"', get_class($user)));
  35. }
  36. return $user;
  37. }
  38. /**
  39. * {@inheritdoc}
  40. */
  41. public function loadUserByOAuthUserResponse(UserResponseInterface $response)
  42. {
  43. $user = $this->loadUserByUsername($response->getNickname());
  44. $user->setRoles($response->getRoles());
  45. $user->setTenancies($response->getTenancies());
  46. $user->setTenancyCurrent($response->getTenancyCurrent());
  47. $user->setHasIntercom($response->getHasIntercom());
  48. $token = new UsernamePasswordToken($user, null, "secured_area", $user->getRoles());
  49. $this->securityTokenStorage->setToken($token);
  50. return $user;
  51. }
  52. /**
  53. * {@inheritdoc}
  54. */
  55. public function supportsClass($class)
  56. {
  57. return $class === 'Base\\OAuthClientBundle\\Security\\Core\\User\\CustomOAuthUser';
  58. }
  59. }