/** * * @param \Zend\ServiceManager\ServiceLocatorInterface $serviceLocator * @return \Zend\Authentication\AuthenticationService */ public function createService(ServiceLocatorInterface $serviceLocator) { $chain = new Chain(); $chain->add($serviceLocator->get('doctrine.authenticationstorage.orm_default'), 2); $conn = $serviceLocator->get('doctrine.connection.orm_default'); $chain->add(new DbalStorage($conn), 1); return new AuthenticationService($chain, $serviceLocator->get('doctrine.authenticationadapter.orm_default')); }
/** * Ensure that chain will yield non-empty if one of its underlying storage * engines is non-empty. * * Make sure that storage engines with higher priority then the first non-empty * storage engine get populated with that same content. */ public function testSuccessfullReadWillPopulateStoragesWithHigherPriority() { $emptyStorageA = $this->storageFactory(); $emptyStorageB = $this->storageFactory(); $storageC = $this->storageFactory(self::ID); $emptyStorageD = $this->storageFactory(); $chain = new Chain(); $chain->add($emptyStorageA); $chain->add($emptyStorageB); $chain->add($storageC); $chain->add($emptyStorageD); // Chain is non empty $this->assertFalse($chain->isEmpty()); $this->assertEquals(self::ID, $chain->read()); // Storage A and B are filled $this->assertFalse($emptyStorageA->isEmpty()); $this->assertEquals(self::ID, $emptyStorageA->read()); $this->assertFalse($emptyStorageA->isEmpty()); $this->assertEquals(self::ID, $emptyStorageB->read()); // Storage C and D remain identical $this->assertFalse($storageC->isEmpty()); $this->assertEquals(self::ID, $storageC->read()); $this->assertTrue($emptyStorageD->isEmpty()); }
/** * Registers services on the given app. * * This method should only be used to configure services and parameters. * It should not get services. * * @param Application $app */ public function register(Application $app) { $app['zend.authentication.firewalls'] = isset($app['zend.authentication.firewalls']) ? $app['zend.authentication.firewalls'] : []; $app['zend.authentication.storage_factory.session'] = $app->protect(function (array $options) use($app) { return $app->share(function () use($app, $options) { return new Session(isset($options['namespace']) ? $options['namespace'] : null, isset($options['member']) ? $options['member'] : null); }); }); $app['zend.authentication.storage_factory.non_persistent'] = $app->protect(function () use($app) { return $app->share(function () { return new NonPersistent(); }); }); $app['zend.authentication.storage_factory.chain'] = $app->protect(function (array $options) use($app) { return $app->share(function () use($app, $options) { $options = array_map(function ($option) use($app) { /* @var $factory \Closure */ $factory = is_string($option) ? $app->raw($option) : $app['zend.authentication.storage_factory.' . $option['type']]($option['options']); return $factory($app); }, $options); $chain = new Chain(); foreach ($options as $option) { $chain->add($option); } return $chain; }); }); $app['zend.authentication.adapter_factory.db'] = $app->protect(function (array $options) use($app) { return $app->share(function () use($app, $options) { return new Database($app['db'], $options); }); }); $app['zend.authentication.adapter_factory.digest'] = $app->protect(function (array $options) use($app) { return $app->share(function () use($app, $options) { return new Digest($options); }); }); $app['zend.authentication.adapter_factory.http_basic'] = $app->protect(function (array $options) use($app) { return $app->share(function () use($app, $options) { $filename = $options['filename']; unset($options['filename']); return new Http\HttpBasic(new FileResolver($filename), $this['request_stack']->getCurrentRequest(), $options); }); }); $app['zend.authentication.adapter_factory.http_digest'] = $app->protect(function (array $options) use($app) { return $app->share(function () use($app, $options) { $filename = $options['filename']; unset($options['filename']); return new Http\HttpDigest(new FileResolver($filename), $this['request_stack']->getCurrentRequest(), $options); }); }); $app['zend.authentication.adapter_factory.callback'] = $app->protect(function (array $options) use($app) { return $app->share(function () use($options) { return new Callback($options['callback']); }); }); $app['zend.authentication.adapter_factory.chain'] = $app->protect(function (array $options) use($app) { return $app->share(function () use($app, $options) { $options = array_map(function ($option) use($app) { /* @var $factory \Closure */ $factory = is_string($option) ? $app->raw($option) : $app['zend.authentication.adapter_factory.' . $option['type']]($option['options']); return $factory($app); }, $options); return new \SilexCMF\ZendAuthentication\Adapter\Chain($options, isset($app['logger']) ? $app['logger'] : null); }); }); $app['zend.authentication.listener_factory.form'] = $app->protect(function ($name, array $options) use($app) { return $app->share(function () use($app, $name, $options) { return new FormListener($app['zend.authentication.service.' . $name], $options['pattern'], $options['whitelist'], new Container('zend.authentication.session.' . $name), $options['form']); }); }); $app['zend.authentication.listener_factory.http'] = $app->protect(function ($name, array $options) use($app) { return $app->share(function () use($app, $name, $options) { return new HttpListener($app['zend.authentication.service.' . $name], $options['pattern'], $options['whitelist']); }); }); $app['zend.authentication.listener_factory.logout'] = $app->protect(function ($name, array $options) use($app) { return $app->share(function () use($app, $name, $options) { $options = $this->logoutListenerOptions->resolve($options); return new LogoutListener($app['zend.authentication.service.' . $name], $options['logout_url'], $options['target_url']); }); }); $app['zend.authentication.service_factory'] = $app->protect(function ($name, array $options) use($app) { $options = $this->authenticationServiceOptions->resolve($options); $storageId = 'zend.authentication.storage.' . $name; if (!isset($app[$storageId])) { $app[$storageId] = is_string($options['storage']) ? $app->raw($options['storage']) : $app['zend.authentication.storage_factory.' . $options['storage']['type']]($options['storage']['options']); } $adapterId = 'zend.authentication.adapter.' . $name; if (!isset($app[$adapterId])) { $app[$adapterId] = is_string($options['adapter']) ? $app->raw($options['adapter']) : $app['zend.authentication.adapter_factory.' . $options['storage']['type']]($options['storage']['options']); } if (isset($options['form'])) { $app['zend.authentication.listener.form.' . $name] = $app['zend.authentication.listener_factory.form']($options); } if (isset($options['http'])) { $app['zend.authentication.listener.http.' . $name] = $app['zend.authentication.listener_factory.http'](); } if (isset($options['logout'])) { $app['zend.authentication.listener.logout.' . $name] = $app['zend.authentication.listener_factory.logout']($options['logout']); } return $app->share(function () use($app, $name, $options) { return new AuthenticationService($app['zend.authentication.storage.' . $name], $app['zend.authentication.adapter.' . $name]); }); }); }