filterHttpRequest('GET', $request_uri); $url = $filterResult['url']; $headers = $filterResult['headers']; $client->setHeaders($headers); $client->setUri($url); } else { $client->setUri($request_uri); } try { $response = $client->request('GET'); } catch (Zend_Http_Client_Exception $e) { require_once 'Zend/Gdata/App/HttpException.php'; throw new Zend_Gdata_App_HttpException($e->getMessage(), $e); } // Parse Google's response if ($response->isSuccessful()) { $goog_resp = array(); foreach (explode("\n", $response->getBody()) as $l) { $l = chop($l); if ($l) { list($key, $val) = explode('=', chop($l), 2); $goog_resp[$key] = $val; } } return $goog_resp['Token']; } else { require_once 'Zend/Gdata/App/AuthException.php'; throw new Zend_Gdata_App_AuthException( 'Token upgrade failed. Reason: ' . $response->getBody()); } } /** * Revoke a token * * @param string $token The token to revoke * @param Zend_Http_Client $client (optional) HTTP client to use to make the request * @param string $request_uri (optional) URI to which to direct the revokation request * @return boolean Whether the revokation was successful * @throws Zend_Gdata_App_HttpException */ public static function AuthSubRevokeToken($token, $client = null, $request_uri = self::AUTHSUB_REVOKE_TOKEN_URI) { $client = self::getHttpClient($token, $client); if ($client instanceof Zend_Gdata_HttpClient) { $filterResult = $client->filterHttpRequest('GET', $request_uri); $url = $filterResult['url']; $headers = $filterResult['headers']; $client->setHeaders($headers); $client->setUri($url); $client->resetParameters(); } else { $client->setUri($request_uri); } ob_start(); try { $response = $client->request('GET'); } catch (Zend_Http_Client_Exception $e) { require_once 'Zend/Gdata/App/HttpException.php'; throw new Zend_Gdata_App_HttpException($e->getMessage(), $e); } ob_end_clean(); // Parse Google's response if ($response->isSuccessful()) { return true; } else { return false; } } /** * get token information * * @param string $token The token to retrieve information about * @param Zend_Http_Client $client (optional) HTTP client to use to * make the request * @param string $request_uri (optional) URI to which to direct * the information request */ public static function getAuthSubTokenInfo( $token, $client = null, $request_uri = self::AUTHSUB_TOKEN_INFO_URI) { $client = self::getHttpClient($token, $client); if ($client instanceof Zend_Gdata_HttpClient) { $filterResult = $client->filterHttpRequest('GET', $request_uri); $url = $filterResult['url']; $headers = $filterResult['headers']; $client->setHeaders($headers); $client->setUri($url); } else { $client->setUri($request_uri); } ob_start(); try { $response = $client->request('GET'); } catch (Zend_Http_Client_Exception $e) { require_once 'Zend/Gdata/App/HttpException.php'; throw new Zend_Gdata_App_HttpException($e->getMessage(), $e); } ob_end_clean(); return $response->getBody(); } /** * Retrieve a HTTP client object with AuthSub credentials attached * as the Authorization header * * @param string $token The token to retrieve information about * @param Zend_Gdata_HttpClient $client (optional) HTTP client to use to make the request */ public static function getHttpClient($token, $client = null) { if ($client == null) { $client = new Zend_Gdata_HttpClient(); } if (!$client instanceof Zend_Http_Client) { require_once 'Zend/Gdata/App/HttpException.php'; throw new Zend_Gdata_App_HttpException('Client is not an instance of Zend_Http_Client.'); } $useragent = 'Zend_Framework_Gdata/' . Zend_Version::VERSION; $client->setConfig(array( 'strictredirects' => true, 'useragent' => $useragent ) ); $client->setAuthSubToken($token); return $client; } }