/**
  * @covers Alchemy\Phrasea\Authentication\ProvidersCollection::get
  */
 public function testGet()
 {
     $provider = $this->getProviderMock('neutron-provider');
     $providers = new ProvidersCollection();
     $providers->register($provider);
     $this->assertSame($provider, $providers->get('neutron-provider'));
 }
 public function register(Application $app)
 {
     $app['authentication'] = $app->share(function (Application $app) {
         return new Authenticator($app, $app['browser'], $app['session'], $app['EM']);
     });
     $app['authentication.token-validator'] = $app->share(function (Application $app) {
         return new TokenValidator($app['tokens']);
     });
     $app['authentication.persistent-manager'] = $app->share(function (Application $app) {
         return new CookieManager($app['auth.password-encoder'], $app['EM'], $app['browser']);
     });
     $app['authentication.suggestion-finder'] = $app->share(function (Application $app) {
         return new SuggestionFinder($app['manipulator.user']->getRepository());
     });
     $app['authentication.providers.factory'] = $app->share(function (Application $app) {
         return new ProviderFactory($app['url_generator'], $app['session']);
     });
     $app['authentication.providers.account-creator'] = $app->share(function (Application $app) {
         $authConf = $app['conf']->get('authentication');
         $templates = array_filter(array_map(function ($templateId) use($app) {
             try {
                 if (is_int($templateId) || ctype_digit($templateId)) {
                     return $app['manipulator.user']->getRepository()->find($templateId);
                 }
                 if (false !== $templateId) {
                     return $app['manipulator.user']->getRepository()->find($templateId);
                 }
             } catch (\Exception $e) {
             }
         }, $authConf['auto-create']['templates']));
         $enabled = $app['conf']->get(['registry', 'registration', 'auto-register-enabled']) && $app['registration.manager']->isRegistrationEnabled();
         return new AccountCreator($app['tokens'], $app['phraseanet.appbox'], $enabled, $templates);
     });
     $app['authentication.providers'] = $app->share(function (Application $app) {
         $providers = new ProvidersCollection();
         $authConf = $app['conf']->get('authentication');
         foreach ($authConf['providers'] as $providerId => $data) {
             if (isset($data['enabled']) && false === $data['enabled']) {
                 continue;
             }
             $providers->register($app['authentication.providers.factory']->build($providerId, $data['options']));
         }
         return $providers;
     });
     $app['authentication.manager'] = $app->share(function (Application $app) {
         return new Manager($app['authentication'], $app['authentication.providers']);
     });
     $app['auth.password-encoder'] = $app->share(function (Application $app) {
         return new PasswordEncoder($app['conf']->get(['main', 'key']));
     });
     $app['auth.old-password-encoder'] = $app->share(function (Application $app) {
         return new OldPasswordEncoder();
     });
     $app['auth.native.failure-manager'] = $app->share(function (Application $app) {
         $authConf = $app['conf']->get(['authentication', 'captcha']);
         return new FailureManager($app['EM'], $app['recaptcha'], isset($authConf['trials-before-display']) ? $authConf['trials-before-display'] : 9);
     });
     $app['auth.password-checker'] = $app->share(function (Application $app) {
         return new NativeAuthentication($app['auth.password-encoder'], $app['auth.old-password-encoder'], $app['manipulator.user']);
     });
     $app['auth.native'] = $app->share(function (Application $app) {
         $authConf = $app['conf']->get('authentication');
         if ($authConf['captcha']['enabled']) {
             return new FailureHandledNativeAuthentication($app['auth.password-checker'], $app['auth.native.failure-manager']);
         } else {
             return $app['auth.password-checker'];
         }
     });
 }