web/Zend/Auth/Adapter/OpenId.php
changeset 0 4eba9c11703f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/Zend/Auth/Adapter/OpenId.php	Mon Dec 13 18:29:26 2010 +0100
@@ -0,0 +1,284 @@
+<?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_Auth
+ * @subpackage Zend_Auth_Adapter
+ * @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: OpenId.php 20096 2010-01-06 02:05:09Z bkarwin $
+ */
+
+
+/**
+ * @see Zend_Auth_Adapter_Interface
+ */
+require_once 'Zend/Auth/Adapter/Interface.php';
+
+
+/**
+ * @see Zend_OpenId_Consumer
+ */
+require_once 'Zend/OpenId/Consumer.php';
+
+
+/**
+ * A Zend_Auth Authentication Adapter allowing the use of OpenID protocol as an
+ * authentication mechanism
+ *
+ * @category   Zend
+ * @package    Zend_Auth
+ * @subpackage Zend_Auth_Adapter
+ * @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_Auth_Adapter_OpenId implements Zend_Auth_Adapter_Interface
+{
+    /**
+     * The identity value being authenticated
+     *
+     * @var string
+     */
+    private $_id = null;
+
+    /**
+     * Reference to an implementation of a storage object
+     *
+     * @var Zend_OpenId_Consumer_Storage
+     */
+    private $_storage = null;
+
+    /**
+     * The URL to redirect response from server to
+     *
+     * @var string
+     */
+    private $_returnTo = null;
+
+    /**
+     * The HTTP URL to identify consumer on server
+     *
+     * @var string
+     */
+    private $_root = null;
+
+    /**
+     * Extension object or array of extensions objects
+     *
+     * @var string
+     */
+    private $_extensions = null;
+
+    /**
+     * The response object to perform HTTP or HTML form redirection
+     *
+     * @var Zend_Controller_Response_Abstract
+     */
+    private $_response = null;
+
+    /**
+     * Enables or disables interaction with user during authentication on
+     * OpenID provider.
+     *
+     * @var bool
+     */
+    private $_check_immediate = false;
+
+    /**
+     * HTTP client to make HTTP requests
+     *
+     * @var Zend_Http_Client $_httpClient
+     */
+    private $_httpClient = null;
+
+    /**
+     * Constructor
+     *
+     * @param string $id the identity value
+     * @param Zend_OpenId_Consumer_Storage $storage an optional implementation
+     *        of a storage object
+     * @param string $returnTo HTTP URL to redirect response from server to
+     * @param string $root HTTP URL to identify consumer on server
+     * @param mixed $extensions extension object or array of extensions objects
+     * @param Zend_Controller_Response_Abstract $response an optional response
+     *        object to perform HTTP or HTML form redirection
+     * @return void
+     */
+    public function __construct($id = null,
+                                Zend_OpenId_Consumer_Storage $storage = null,
+                                $returnTo = null,
+                                $root = null,
+                                $extensions = null,
+                                Zend_Controller_Response_Abstract $response = null) {
+        $this->_id         = $id;
+        $this->_storage    = $storage;
+        $this->_returnTo   = $returnTo;
+        $this->_root       = $root;
+        $this->_extensions = $extensions;
+        $this->_response   = $response;
+    }
+
+    /**
+     * Sets the value to be used as the identity
+     *
+     * @param  string $id the identity value
+     * @return Zend_Auth_Adapter_OpenId Provides a fluent interface
+     */
+    public function setIdentity($id)
+    {
+        $this->_id = $id;
+        return $this;
+    }
+
+    /**
+     * Sets the storage implementation which will be use by OpenId
+     *
+     * @param  Zend_OpenId_Consumer_Storage $storage
+     * @return Zend_Auth_Adapter_OpenId Provides a fluent interface
+     */
+    public function setStorage(Zend_OpenId_Consumer_Storage $storage)
+    {
+        $this->_storage = $storage;
+        return $this;
+    }
+
+    /**
+     * Sets the HTTP URL to redirect response from server to
+     *
+     * @param  string $returnTo
+     * @return Zend_Auth_Adapter_OpenId Provides a fluent interface
+     */
+    public function setReturnTo($returnTo)
+    {
+        $this->_returnTo = $returnTo;
+        return $this;
+    }
+
+    /**
+     * Sets HTTP URL to identify consumer on server
+     *
+     * @param  string $root
+     * @return Zend_Auth_Adapter_OpenId Provides a fluent interface
+     */
+    public function setRoot($root)
+    {
+        $this->_root = $root;
+        return $this;
+    }
+
+    /**
+     * Sets OpenID extension(s)
+     *
+     * @param  mixed $extensions
+     * @return Zend_Auth_Adapter_OpenId Provides a fluent interface
+     */
+    public function setExtensions($extensions)
+    {
+        $this->_extensions = $extensions;
+        return $this;
+    }
+
+    /**
+     * Sets an optional response object to perform HTTP or HTML form redirection
+     *
+     * @param  string $root
+     * @return Zend_Auth_Adapter_OpenId Provides a fluent interface
+     */
+    public function setResponse($response)
+    {
+        $this->_response = $response;
+        return $this;
+    }
+
+    /**
+     * Enables or disables interaction with user during authentication on
+     * OpenID provider.
+     *
+     * @param  bool $check_immediate
+     * @return Zend_Auth_Adapter_OpenId Provides a fluent interface
+     */
+    public function setCheckImmediate($check_immediate)
+    {
+        $this->_check_immediate = $check_immediate;
+        return $this;
+    }
+
+    /**
+     * Sets HTTP client object to make HTTP requests
+     *
+     * @param Zend_Http_Client $client HTTP client object to be used
+     */
+    public function setHttpClient($client) {
+        $this->_httpClient = $client;
+    }
+
+    /**
+     * Authenticates the given OpenId identity.
+     * Defined by Zend_Auth_Adapter_Interface.
+     *
+     * @throws Zend_Auth_Adapter_Exception If answering the authentication query is impossible
+     * @return Zend_Auth_Result
+     */
+    public function authenticate() {
+        $id = $this->_id;
+        if (!empty($id)) {
+            $consumer = new Zend_OpenId_Consumer($this->_storage);
+            $consumer->setHttpClient($this->_httpClient);
+            /* login() is never returns on success */
+            if (!$this->_check_immediate) {
+                if (!$consumer->login($id,
+                        $this->_returnTo,
+                        $this->_root,
+                        $this->_extensions,
+                        $this->_response)) {
+                    return new Zend_Auth_Result(
+                        Zend_Auth_Result::FAILURE,
+                        $id,
+                        array("Authentication failed", $consumer->getError()));
+                }
+            } else {
+                if (!$consumer->check($id,
+                        $this->_returnTo,
+                        $this->_root,
+                        $this->_extensions,
+                        $this->_response)) {
+                    return new Zend_Auth_Result(
+                        Zend_Auth_Result::FAILURE,
+                        $id,
+                        array("Authentication failed", $consumer->getError()));
+                }
+            }
+        } else {
+            $params = (isset($_SERVER['REQUEST_METHOD']) &&
+                       $_SERVER['REQUEST_METHOD']=='POST') ? $_POST: $_GET;
+            $consumer = new Zend_OpenId_Consumer($this->_storage);
+            $consumer->setHttpClient($this->_httpClient);
+            if ($consumer->verify(
+                    $params,
+                    $id,
+                    $this->_extensions)) {
+                return new Zend_Auth_Result(
+                    Zend_Auth_Result::SUCCESS,
+                    $id,
+                    array("Authentication successful"));
+            } else {
+                return new Zend_Auth_Result(
+                    Zend_Auth_Result::FAILURE,
+                    $id,
+                    array("Authentication failed", $consumer->getError()));
+            }
+        }
+    }
+
+}