Pocket.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <?php
  2. namespace OAuth\OAuth2\Service;
  3. use OAuth\OAuth2\Token\StdOAuth2Token;
  4. use OAuth\Common\Http\Exception\TokenResponseException;
  5. use OAuth\Common\Http\Uri\Uri;
  6. use OAuth\Common\Consumer\CredentialsInterface;
  7. use OAuth\Common\Http\Uri\UriInterface;
  8. use OAuth\Common\Storage\TokenStorageInterface;
  9. use OAuth\Common\Http\Client\ClientInterface;
  10. class Pocket extends AbstractService
  11. {
  12. public function __construct(
  13. CredentialsInterface $credentials,
  14. ClientInterface $httpClient,
  15. TokenStorageInterface $storage,
  16. $scopes = array(),
  17. UriInterface $baseApiUri = null
  18. ) {
  19. parent::__construct($credentials, $httpClient, $storage, $scopes, $baseApiUri);
  20. if ($baseApiUri === null) {
  21. $this->baseApiUri = new Uri('https://getpocket.com/v3/');
  22. }
  23. }
  24. public function getRequestTokenEndpoint()
  25. {
  26. return new Uri('https://getpocket.com/v3/oauth/request');
  27. }
  28. public function getAuthorizationEndpoint()
  29. {
  30. return new Uri('https://getpocket.com/auth/authorize');
  31. }
  32. public function getAccessTokenEndpoint()
  33. {
  34. return new Uri('https://getpocket.com/v3/oauth/authorize');
  35. }
  36. public function getAuthorizationUri(array $additionalParameters = array())
  37. {
  38. $parameters = array_merge(
  39. $additionalParameters,
  40. array(
  41. 'redirect_uri' => $this->credentials->getCallbackUrl(),
  42. )
  43. );
  44. // Build the url
  45. $url = clone $this->getAuthorizationEndpoint();
  46. foreach ($parameters as $key => $val) {
  47. $url->addToQuery($key, $val);
  48. }
  49. return $url;
  50. }
  51. public function requestRequestToken()
  52. {
  53. $responseBody = $this->httpClient->retrieveResponse(
  54. $this->getRequestTokenEndpoint(),
  55. array(
  56. 'consumer_key' => $this->credentials->getConsumerId(),
  57. 'redirect_uri' => $this->credentials->getCallbackUrl(),
  58. )
  59. );
  60. $code = $this->parseRequestTokenResponse($responseBody);
  61. return $code;
  62. }
  63. protected function parseRequestTokenResponse($responseBody)
  64. {
  65. parse_str($responseBody, $data);
  66. if (null === $data || !is_array($data)) {
  67. throw new TokenResponseException('Unable to parse response.');
  68. } elseif (!isset($data['code'])) {
  69. throw new TokenResponseException('Error in retrieving code.');
  70. }
  71. return $data['code'];
  72. }
  73. public function requestAccessToken($code)
  74. {
  75. $bodyParams = array(
  76. 'consumer_key' => $this->credentials->getConsumerId(),
  77. 'code' => $code,
  78. );
  79. $responseBody = $this->httpClient->retrieveResponse(
  80. $this->getAccessTokenEndpoint(),
  81. $bodyParams,
  82. $this->getExtraOAuthHeaders()
  83. );
  84. $token = $this->parseAccessTokenResponse($responseBody);
  85. $this->storage->storeAccessToken($this->service(), $token);
  86. return $token;
  87. }
  88. protected function parseAccessTokenResponse($responseBody)
  89. {
  90. parse_str($responseBody, $data);
  91. if ($data === null || !is_array($data)) {
  92. throw new TokenResponseException('Unable to parse response.');
  93. } elseif (isset($data['error'])) {
  94. throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"');
  95. }
  96. $token = new StdOAuth2Token();
  97. #$token->setRequestToken($data['access_token']);
  98. $token->setAccessToken($data['access_token']);
  99. $token->setEndOfLife(StdOAuth2Token::EOL_NEVER_EXPIRES);
  100. unset($data['access_token']);
  101. $token->setExtraParams($data);
  102. return $token;
  103. }
  104. }