RequestListener.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace Base\OAuthClientBundle\EventListener;
  3. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  4. class RequestListener
  5. {
  6. protected $securityTokenStorage;
  7. protected $client_id;
  8. protected $client_secret;
  9. protected $access_token_url;
  10. /**
  11. * @param SecurityTokenStorage $securityTokenStorage
  12. * @param string $client_id
  13. * @param string $client_secret
  14. * @param string $access_token_url
  15. */
  16. public function __construct($securityTokenStorage, $client_id, $client_secret, $access_token_url)
  17. {
  18. $this->securityTokenStorage = $securityTokenStorage;
  19. $this->client_id = $client_id;
  20. $this->client_secret = $client_secret;
  21. $this->access_token_url = $access_token_url;
  22. }
  23. /**
  24. * @param GetResponseEvent $event
  25. * @return type
  26. */
  27. public function onKernelRequest(GetResponseEvent $event)
  28. {
  29. if (!$event->isMasterRequest()) {
  30. return;
  31. }
  32. $token = $this->securityTokenStorage->getToken();
  33. if ($token && method_exists($token, 'isExpired') && $token->isExpired()) {
  34. $parameters = array(
  35. 'refresh_token' => $token->getRefreshToken(),
  36. 'grant_type' => 'refresh_token',
  37. 'client_id' => $this->client_id,
  38. 'client_secret' => $this->client_secret
  39. );
  40. $curl = curl_init();
  41. curl_setopt_array($curl, array(
  42. CURLOPT_RETURNTRANSFER => 1,
  43. CURLOPT_URL => $this->access_token_url . '?' . http_build_query($parameters, '', '&')
  44. ));
  45. $response = curl_exec($curl);
  46. curl_close($curl);
  47. $newToken = json_decode($response, true);
  48. $token->setAccessToken($newToken['access_token']);
  49. $token->setRefreshToken($newToken['refresh_token']);
  50. $token->setExpiresIn($newToken['expires_in']);
  51. $this->securityTokenStorage->setToken($token);
  52. }
  53. return;
  54. }
  55. }