CustomOAuthUserProvider.php 1.8 KB

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