169 Zeilen
		
	
	
	
		
			3,9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			169 Zeilen
		
	
	
	
		
			3,9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?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
 | 
						|
 * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
 | 
						|
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 | 
						|
 * @version    $Id$
 | 
						|
 */
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
 * @category   Zend
 | 
						|
 * @package    Zend_Auth
 | 
						|
 * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
 | 
						|
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 | 
						|
 */
 | 
						|
class Zend_Auth
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Singleton instance
 | 
						|
     *
 | 
						|
     * @var Zend_Auth
 | 
						|
     */
 | 
						|
    protected static $_instance = null;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Persistent storage handler
 | 
						|
     *
 | 
						|
     * @var Zend_Auth_Storage_Interface
 | 
						|
     */
 | 
						|
    protected $_storage = null;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Singleton pattern implementation makes "new" unavailable
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    protected function __construct()
 | 
						|
    {}
 | 
						|
 | 
						|
    /**
 | 
						|
     * Singleton pattern implementation makes "clone" unavailable
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    protected function __clone()
 | 
						|
    {}
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns an instance of Zend_Auth
 | 
						|
     *
 | 
						|
     * Singleton pattern implementation
 | 
						|
     *
 | 
						|
     * @return Zend_Auth Provides a fluent interface
 | 
						|
     */
 | 
						|
    public static function getInstance()
 | 
						|
    {
 | 
						|
        if (null === self::$_instance) {
 | 
						|
            self::$_instance = new self();
 | 
						|
        }
 | 
						|
 | 
						|
        return self::$_instance;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the persistent storage handler
 | 
						|
     *
 | 
						|
     * Session storage is used by default unless a different storage adapter has been set.
 | 
						|
     *
 | 
						|
     * @return Zend_Auth_Storage_Interface
 | 
						|
     */
 | 
						|
    public function getStorage()
 | 
						|
    {
 | 
						|
        if (null === $this->_storage) {
 | 
						|
            /**
 | 
						|
             * @see Zend_Auth_Storage_Session
 | 
						|
             */
 | 
						|
            require_once 'Zend/Auth/Storage/Session.php';
 | 
						|
            $this->setStorage(new Zend_Auth_Storage_Session());
 | 
						|
        }
 | 
						|
 | 
						|
        return $this->_storage;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the persistent storage handler
 | 
						|
     *
 | 
						|
     * @param  Zend_Auth_Storage_Interface $storage
 | 
						|
     * @return Zend_Auth Provides a fluent interface
 | 
						|
     */
 | 
						|
    public function setStorage(Zend_Auth_Storage_Interface $storage)
 | 
						|
    {
 | 
						|
        $this->_storage = $storage;
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Authenticates against the supplied adapter
 | 
						|
     *
 | 
						|
     * @param  Zend_Auth_Adapter_Interface $adapter
 | 
						|
     * @return Zend_Auth_Result
 | 
						|
     */
 | 
						|
    public function authenticate(Zend_Auth_Adapter_Interface $adapter)
 | 
						|
    {
 | 
						|
        $result = $adapter->authenticate();
 | 
						|
 | 
						|
        /**
 | 
						|
         * ZF-7546 - prevent multiple succesive calls from storing inconsistent results
 | 
						|
         * Ensure storage has clean state
 | 
						|
         */
 | 
						|
        if ($this->hasIdentity()) {
 | 
						|
            $this->clearIdentity();
 | 
						|
        }
 | 
						|
 | 
						|
        if ($result->isValid()) {
 | 
						|
            $this->getStorage()->write($result->getIdentity());
 | 
						|
        }
 | 
						|
 | 
						|
        return $result;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns true if and only if an identity is available from storage
 | 
						|
     *
 | 
						|
     * @return boolean
 | 
						|
     */
 | 
						|
    public function hasIdentity()
 | 
						|
    {
 | 
						|
        return !$this->getStorage()->isEmpty();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the identity from storage or null if no identity is available
 | 
						|
     *
 | 
						|
     * @return mixed|null
 | 
						|
     */
 | 
						|
    public function getIdentity()
 | 
						|
    {
 | 
						|
        $storage = $this->getStorage();
 | 
						|
 | 
						|
        if ($storage->isEmpty()) {
 | 
						|
            return null;
 | 
						|
        }
 | 
						|
 | 
						|
        return $storage->read();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Clears the identity from persistent storage
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function clearIdentity()
 | 
						|
    {
 | 
						|
        $this->getStorage()->clear();
 | 
						|
    }
 | 
						|
}
 |