2023-03-11 12:04:29 +03:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Zend Framework (http://framework.zend.com/)
|
|
|
|
*
|
|
|
|
* @link http://github.com/zendframework/zf2 for the canonical source repository
|
2023-04-01 09:03:34 +03:00
|
|
|
* @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
|
2023-03-11 12:04:29 +03:00
|
|
|
* @license http://framework.zend.com/license/new-bsd New BSD License
|
|
|
|
*/
|
|
|
|
namespace Zend\Session;
|
|
|
|
|
|
|
|
use Zend\EventManager\EventManager;
|
|
|
|
use Zend\Session\Storage\StorageInterface as Storage;
|
|
|
|
use Zend\Session\Validator\ValidatorInterface as Validator;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Validator chain for validating sessions
|
|
|
|
*/
|
|
|
|
class ValidatorChain extends EventManager
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @var Storage
|
|
|
|
*/
|
|
|
|
protected $storage;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Construct the validation chain
|
|
|
|
*
|
|
|
|
* Retrieves validators from session storage and attaches them.
|
|
|
|
*
|
|
|
|
* @param Storage $storage
|
|
|
|
*/
|
|
|
|
public function __construct(Storage $storage)
|
|
|
|
{
|
|
|
|
$this->storage = $storage;
|
|
|
|
|
|
|
|
$validators = $storage->getMetadata('_VALID');
|
|
|
|
if ($validators) {
|
|
|
|
foreach ($validators as $validator => $data) {
|
|
|
|
$this->attach('session.validate', array(new $validator($data), 'isValid'));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Attach a listener to the session validator chain
|
|
|
|
*
|
|
|
|
* @param string $event
|
|
|
|
* @param callable $callback
|
|
|
|
* @param int $priority
|
|
|
|
* @return \Zend\Stdlib\CallbackHandler
|
|
|
|
*/
|
|
|
|
public function attach($event, $callback = null, $priority = 1)
|
|
|
|
{
|
|
|
|
$context = null;
|
|
|
|
if ($callback instanceof Validator) {
|
|
|
|
$context = $callback;
|
|
|
|
} elseif (is_array($callback)) {
|
|
|
|
$test = array_shift($callback);
|
|
|
|
if ($test instanceof Validator) {
|
|
|
|
$context = $test;
|
|
|
|
}
|
|
|
|
array_unshift($callback, $test);
|
|
|
|
}
|
|
|
|
if ($context instanceof Validator) {
|
|
|
|
$data = $context->getData();
|
|
|
|
$name = $context->getName();
|
|
|
|
$this->getStorage()->setMetadata('_VALID', array($name => $data));
|
|
|
|
}
|
|
|
|
|
|
|
|
$listener = parent::attach($event, $callback, $priority);
|
|
|
|
return $listener;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Retrieve session storage object
|
|
|
|
*
|
|
|
|
* @return Storage
|
|
|
|
*/
|
|
|
|
public function getStorage()
|
|
|
|
{
|
|
|
|
return $this->storage;
|
|
|
|
}
|
|
|
|
}
|