web/lib/Zend/Oauth/Consumer.php
changeset 64 162c1de6545a
parent 19 1c2f13fd785c
child 68 ecaf28ffe26e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/Zend/Oauth/Consumer.php	Fri Mar 11 15:05:35 2011 +0100
@@ -0,0 +1,279 @@
+<?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 license@zend.com so we can send you a copy immediately.
+ *
+ * @category   Zend
+ * @package    Zend_Oauth
+ * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ * @version    $Id: Consumer.php 23170 2010-10-19 18:29:24Z mabe $
+ */
+
+/** Zend_Oauth */
+require_once 'Zend/Oauth.php';
+
+/** Zend_Uri */
+require_once 'Zend/Uri.php';
+
+/** Zend_Oauth_Http_RequestToken */
+require_once 'Zend/Oauth/Http/RequestToken.php';
+
+/** Zend_Oauth_Http_UserAuthorization */
+require_once 'Zend/Oauth/Http/UserAuthorization.php';
+
+/** Zend_Oauth_Http_AccessToken */
+require_once 'Zend/Oauth/Http/AccessToken.php';
+
+/** Zend_Oauth_Token_AuthorizedRequest */
+require_once 'Zend/Oauth/Token/AuthorizedRequest.php';
+
+/** Zend_Oauth_Config */
+require_once 'Zend/Oauth/Config.php';
+
+/**
+ * @category   Zend
+ * @package    Zend_Oauth
+ * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ */
+class Zend_Oauth_Consumer extends Zend_Oauth
+{
+    public $switcheroo = false; // replace later when this works
+
+    /**
+     * Request Token retrieved from OAuth Provider
+     *
+     * @var Zend_Oauth_Token_Request
+     */
+    protected $_requestToken = null;
+
+    /**
+     * Access token retrieved from OAuth Provider
+     *
+     * @var Zend_Oauth_Token_Access
+     */
+    protected $_accessToken = null;
+
+    /**
+     * @var Zend_Oauth_Config
+     */
+    protected $_config = null;
+
+    /**
+     * Constructor; create a new object with an optional array|Zend_Config
+     * instance containing initialising options.
+     *
+     * @param  array|Zend_Config $options
+     * @return void
+     */
+    public function __construct($options = null)
+    {
+        $this->_config = new Zend_Oauth_Config;
+        if ($options !== null) {
+            if ($options instanceof Zend_Config) {
+                $options = $options->toArray();
+            }
+            $this->_config->setOptions($options);
+        }
+    }
+
+    /**
+     * Attempts to retrieve a Request Token from an OAuth Provider which is
+     * later exchanged for an authorized Access Token used to access the
+     * protected resources exposed by a web service API.
+     *
+     * @param  null|array $customServiceParameters Non-OAuth Provider-specified parameters
+     * @param  null|string $httpMethod
+     * @param  null|Zend_Oauth_Http_RequestToken $request
+     * @return Zend_Oauth_Token_Request
+     */
+    public function getRequestToken(
+        array $customServiceParameters = null,
+        $httpMethod = null,
+        Zend_Oauth_Http_RequestToken $request = null
+    ) {
+        if ($request === null) {
+            $request = new Zend_Oauth_Http_RequestToken($this, $customServiceParameters);
+        } elseif($customServiceParameters !== null) {
+            $request->setParameters($customServiceParameters);
+        }
+        if ($httpMethod !== null) {
+            $request->setMethod($httpMethod);
+        } else {
+            $request->setMethod($this->getRequestMethod());
+        }
+        $this->_requestToken = $request->execute();
+        return $this->_requestToken;
+    }
+
+    /**
+     * After a Request Token is retrieved, the user may be redirected to the
+     * OAuth Provider to authorize the application's access to their
+     * protected resources - the redirect URL being provided by this method.
+     * Once the user has authorized the application for access, they are
+     * redirected back to the application which can now exchange the previous
+     * Request Token for a fully authorized Access Token.
+     *
+     * @param  null|array $customServiceParameters
+     * @param  null|Zend_Oauth_Token_Request $token
+     * @param  null|Zend_OAuth_Http_UserAuthorization $redirect
+     * @return string
+     */
+    public function getRedirectUrl(
+        array $customServiceParameters = null,
+        Zend_Oauth_Token_Request $token = null,
+        Zend_Oauth_Http_UserAuthorization $redirect = null
+    ) {
+        if ($redirect === null) {
+            $redirect = new Zend_Oauth_Http_UserAuthorization($this, $customServiceParameters);
+        } elseif($customServiceParameters !== null) {
+            $redirect->setParameters($customServiceParameters);
+        }
+        if ($token !== null) {
+            $this->_requestToken = $token;
+        }
+        return $redirect->getUrl();
+    }
+
+    /**
+     * Rather than retrieve a redirect URL for use, e.g. from a controller,
+     * one may perform an immediate redirect.
+     *
+     * Sends headers and exit()s on completion.
+     *
+     * @param  null|array $customServiceParameters
+     * @param  null|Zend_Oauth_Token_Request $token
+     * @param  null|Zend_Oauth_Http_UserAuthorization $request
+     * @return void
+     */
+    public function redirect(
+        array $customServiceParameters = null,
+        Zend_Oauth_Token_Request $token = null,
+        Zend_Oauth_Http_UserAuthorization $request = null
+    ) {
+        if ($token instanceof Zend_Oauth_Http_UserAuthorization) {
+            $request = $token;
+            $token = null;
+        }
+        $redirectUrl = $this->getRedirectUrl($customServiceParameters, $token, $request);
+        header('Location: ' . $redirectUrl);
+        exit(1);
+    }
+
+    /**
+     * Retrieve an Access Token in exchange for a previously received/authorized
+     * Request Token.
+     *
+     * @param  array $queryData GET data returned in user's redirect from Provider
+     * @param  Zend_Oauth_Token_Request Request Token information
+     * @param  string $httpMethod
+     * @param  Zend_Oauth_Http_AccessToken $request
+     * @return Zend_Oauth_Token_Access
+     * @throws Zend_Oauth_Exception on invalid authorization token, non-matching response authorization token, or unprovided authorization token
+     */
+    public function getAccessToken(
+        $queryData, 
+        Zend_Oauth_Token_Request $token,
+        $httpMethod = null, 
+        Zend_Oauth_Http_AccessToken $request = null
+    ) {
+        $authorizedToken = new Zend_Oauth_Token_AuthorizedRequest($queryData);
+        if (!$authorizedToken->isValid()) {
+            require_once 'Zend/Oauth/Exception.php';
+            throw new Zend_Oauth_Exception(
+                'Response from Service Provider is not a valid authorized request token');
+        }
+        if ($request === null) {
+            $request = new Zend_Oauth_Http_AccessToken($this);
+        }
+
+        // OAuth 1.0a Verifier
+        if ($authorizedToken->getParam('oauth_verifier') !== null) {
+            $params = array_merge($request->getParameters(), array(
+                'oauth_verifier' => $authorizedToken->getParam('oauth_verifier')
+            ));
+            $request->setParameters($params);
+        }
+        if ($httpMethod !== null) {
+            $request->setMethod($httpMethod);
+        } else {
+            $request->setMethod($this->getRequestMethod());
+        }
+        if (isset($token)) {
+            if ($authorizedToken->getToken() !== $token->getToken()) {
+                require_once 'Zend/Oauth/Exception.php';
+                throw new Zend_Oauth_Exception(
+                    'Authorized token from Service Provider does not match'
+                    . ' supplied Request Token details'
+                );
+            }
+        } else {
+            require_once 'Zend/Oauth/Exception.php';
+            throw new Zend_Oauth_Exception('Request token must be passed to method');
+        }
+        $this->_requestToken = $token;
+        $this->_accessToken = $request->execute();
+        return $this->_accessToken;
+    }
+
+    /**
+     * Return whatever the last Request Token retrieved was while using the
+     * current Consumer instance.
+     *
+     * @return Zend_Oauth_Token_Request
+     */
+    public function getLastRequestToken()
+    {
+        return $this->_requestToken;
+    }
+
+    /**
+     * Return whatever the last Access Token retrieved was while using the
+     * current Consumer instance.
+     *
+     * @return Zend_Oauth_Token_Access
+     */
+    public function getLastAccessToken()
+    {
+        return $this->_accessToken;
+    }
+
+    /**
+     * Alias to self::getLastAccessToken()
+     *
+     * @return Zend_Oauth_Token_Access
+     */
+    public function getToken()
+    {
+        return $this->_accessToken;
+    }
+
+    /**
+     * Simple Proxy to the current Zend_Oauth_Config method. It's that instance
+     * which holds all configuration methods and values this object also presents
+     * as it's API.
+     *
+     * @param  string $method
+     * @param  array $args
+     * @return mixed
+     * @throws Zend_Oauth_Exception if method does not exist in config object
+     */
+    public function __call($method, array $args)
+    {
+        if (!method_exists($this->_config, $method)) {
+            require_once 'Zend/Oauth/Exception.php';
+            throw new Zend_Oauth_Exception('Method does not exist: '.$method);
+        }
+        return call_user_func_array(array($this->_config,$method), $args);
+    }
+}