CustomOAuthUserProvider.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. $token = new UsernamePasswordToken($user, null, "secured_area", $user->getRoles());
  48. $this->securityTokenStorage->setToken($token);
  49. return $user;
  50. }
  51. /**
  52. * {@inheritdoc}
  53. */
  54. public function supportsClass($class)
  55. {
  56. return $class === 'Base\\OAuthClientBundle\\Security\\Core\\User\\CustomOAuthUser';
  57. }
  58. }