1<?php 2 3namespace dokuwiki\plugin\oauth\Service; 4 5use OAuth\Common\Http\Exception\TokenResponseException; 6use OAuth\OAuth2\Service\AbstractService; 7use OAuth\OAuth2\Token\StdOAuth2Token; 8 9/** 10 * Implements the parseAccessTokenResponse like most services do it. Can be used as a base 11 * for custom services. 12 */ 13abstract class AbstractOAuth2Base extends AbstractService 14{ 15 16 /** @inheritdoc */ 17 protected function parseAccessTokenResponse($responseBody) 18 { 19 $data = json_decode($responseBody, true); 20 21 if (null === $data || !is_array($data)) { 22 throw new TokenResponseException('Unable to parse response.'); 23 } elseif (isset($data['error'])) { 24 throw new TokenResponseException('Error in retrieving token: "' . $data['error'] . '"'); 25 } 26 27 $token = new StdOAuth2Token(); 28 $token->setAccessToken($data['access_token']); 29 unset($data['access_token']); 30 31 if (isset($data['expires_in'])) { 32 $token->setLifeTime($data['expires_in']); 33 unset($data['expires_in']); 34 } else { 35 $token->setEndOfLife(StdOAuth2Token::EOL_NEVER_EXPIRES); 36 } 37 38 if (isset($data['refresh_token'])) { 39 $token->setRefreshToken($data['refresh_token']); 40 unset($data['refresh_token']); 41 } 42 43 $token->setExtraParams($data); 44 45 return $token; 46 } 47 48 /** 49 * We accept arbitrary scopes 50 * 51 * @param string $scope 52 * @return bool 53 */ 54 public function isValidScope($scope) 55 { 56 return true; 57 } 58 59} 60