summaryrefslogtreecommitdiff
path: root/applications/core/lib/Zend/Gdata/AuthSub.php
diff options
Diffstat (limited to 'applications/core/lib/Zend/Gdata/AuthSub.php')
-rw-r--r--applications/core/lib/Zend/Gdata/AuthSub.php245
1 files changed, 245 insertions, 0 deletions
diff --git a/applications/core/lib/Zend/Gdata/AuthSub.php b/applications/core/lib/Zend/Gdata/AuthSub.php
new file mode 100644
index 0000000..869df98
--- /dev/null
+++ b/applications/core/lib/Zend/Gdata/AuthSub.php
@@ -0,0 +1,245 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to [email protected] so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+/**
+ * Zend_Gdata_HttpClient
+ */
+require_once 'Zend/Gdata/HttpClient.php';
+
+/**
+ * Zend_Version
+ */
+require_once 'Zend/Version.php';
+
+/**
+ * Wrapper around Zend_Http_Client to facilitate Google's "Account Authentication
+ * Proxy for Web-Based Applications".
+ *
+ * @see http://code.google.com/apis/accounts/AuthForWebApps.html
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_AuthSub
+{
+
+ const AUTHSUB_REQUEST_URI = 'https://www.google.com/accounts/AuthSubRequest';
+
+ const AUTHSUB_SESSION_TOKEN_URI = 'https://www.google.com/accounts/AuthSubSessionToken';
+
+ const AUTHSUB_REVOKE_TOKEN_URI = 'https://www.google.com/accounts/AuthSubRevokeToken';
+
+ const AUTHSUB_TOKEN_INFO_URI = 'https://www.google.com/accounts/AuthSubTokenInfo';
+
+ /**
+ * Creates a URI to request a single-use AuthSub token.
+ *
+ * @param string $next (required) URL identifying the service to be
+ * accessed.
+ * The resulting token will enable access to the specified service only.
+ * Some services may limit scope further, such as read-only access.
+ * @param string $scope (required) URL identifying the service to be
+ * accessed. The resulting token will enable
+ * access to the specified service only.
+ * Some services may limit scope further, such
+ * as read-only access.
+ * @param int $secure (optional) Boolean flag indicating whether the
+ * authentication transaction should issue a secure
+ * token (1) or a non-secure token (0). Secure tokens
+ * are available to registered applications only.
+ * @param int $session (optional) Boolean flag indicating whether
+ * the one-time-use token may be exchanged for
+ * a session token (1) or not (0).
+ * @param string $request_uri (optional) URI to which to direct the
+ * authentication request.
+ */
+ public static function getAuthSubTokenUri($next, $scope, $secure=0, $session=0,
+ $request_uri = self::AUTHSUB_REQUEST_URI)
+ {
+ $querystring = '?next=' . urlencode($next)
+ . '&scope=' . urldecode($scope)
+ . '&secure=' . urlencode($secure)
+ . '&session=' . urlencode($session);
+ return $request_uri . $querystring;
+ }
+
+
+ /**
+ * Upgrades a single use token to a session token
+ *
+ * @param string $token The single use token which is to be upgraded
+ * @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 session token upgrade
+ * @return string The upgraded token value
+ * @throws Zend_Gdata_App_AuthException
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public static function getAuthSubSessionToken(
+ $token, $client = null,
+ $request_uri = self::AUTHSUB_SESSION_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);
+ } 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;
+ }
+
+}