예제 #1
0
 public function testDefaults()
 {
     $this->assertFalse($this->_sut->isExpired());
     $this->assertNull($this->_sut->getAccessToken());
     $this->assertNull($this->_sut->getRefreshToken());
     $this->assertEquals(tubepress_api_http_oauth_v2_TokenInterface::EOL_UNKNOWN, $this->_sut->getEndOfLifeUnixTime());
     $this->assertEquals(array(), $this->_sut->getExtraParams());
 }
예제 #2
0
 public function getStoredToken(tubepress_spi_http_oauth2_Oauth2ProviderInterface $provider)
 {
     $requestedSlug = $this->_context->get(tubepress_api_options_Names::OAUTH2_TOKEN);
     $tokens = $this->_context->get(tubepress_api_options_Names::OAUTH2_TOKENS);
     $decoded = json_decode($tokens, true);
     $providerName = $provider->getName();
     if (!isset($decoded[$providerName])) {
         return null;
     }
     $providerTokens = $decoded[$providerName];
     $explicitSlug = $requestedSlug != '';
     if (!is_array($providerTokens)) {
         return null;
     }
     if ($explicitSlug) {
         if ($explicitSlug === 'none' || !isset($providerTokens[$requestedSlug])) {
             return null;
         }
     } else {
         if (count($providerTokens) === 0) {
             return null;
         }
         $slugs = array_keys($providerTokens);
         $requestedSlug = $slugs[0];
     }
     $tokenData = $providerTokens[$requestedSlug];
     $accessToken = $tokenData[self::$_ACCESS_TOKEN];
     $refreshToken = isset($tokenData[self::$_REFRESH_TOKEN]) ? $tokenData[self::$_REFRESH_TOKEN] : null;
     $expiry = intval($tokenData[self::$_EXPIRY_UNIX]);
     $extra = $tokenData[self::$_EXTRA];
     $toReturn = new tubepress_http_oauth2_impl_token_Token();
     $toReturn->setAccessToken($accessToken);
     $toReturn->setExtraParams($extra);
     $toReturn->setEndOfLifeUnixTime($expiry);
     if ($refreshToken) {
         $toReturn->setRefreshToken($refreshToken);
     }
     return $toReturn;
 }
예제 #3
0
 private function _buildTokenFromResponse(tubepress_spi_http_oauth2_Oauth2ProviderInterface $provider, tubepress_api_http_message_ResponseInterface $response)
 {
     $body = $response->getBody()->toString();
     $decoded = json_decode($body, true);
     if (!is_array($decoded)) {
         throw new RuntimeException(sprintf('%s returned invalid JSON in their access token response', $provider->getDisplayName()));
     }
     if (!isset($decoded['access_token'])) {
         throw new RuntimeException(sprintf('%s did not return an access token in their response', $provider->getDisplayName()));
     }
     if ($provider->getAccessTokenType() != '' && !isset($decoded['token_type'])) {
         throw new RuntimeException(sprintf('%s did not return a token type in their response', $provider->getDisplayName()));
     }
     $tokenType = $decoded['token_type'];
     if ($tokenType !== $provider->getAccessTokenType()) {
         throw new RuntimeException(sprintf('%s should have returned a token type of %s but instead returned %s', $provider->getDisplayName(), $provider->getAccessTokenType(), $tokenType));
     }
     $toReturn = new tubepress_http_oauth2_impl_token_Token();
     $toReturn->setAccessToken($decoded['access_token']);
     if (isset($decoded['expires_in'])) {
         $toReturn->setLifetimeInSeconds(intval($decoded['expires_in']));
     }
     if (isset($decoded['refresh_token'])) {
         $toReturn->setRefreshToken($decoded['refresh_token']);
     }
     $keysToFilter = array('access_token', 'expires_in', 'refresh_token');
     $extraParams = array_diff_key($decoded, array_flip($keysToFilter));
     $toReturn->setExtraParams($extraParams);
     return $toReturn;
 }