/**
  * Get the Authorisation\AuthorisationInterface class to handle the request.
  *
  * @param \Silex\Application $app
  *
  * @throws InvalidAuthorisationRequestException
  */
 protected function setProviderHandler(Application $app)
 {
     $providerName = $this->getProviderName();
     if ($providerName === null) {
         $app['logger.system']->debug('[ClientLogin][Provider]: Request was missing a provider in the GET.', ['event' => 'extensions']);
         throw new Exception\InvalidAuthorisationRequestException('Authentication configuration error. Unable to proceed!');
     }
     $providerConfig = $this->config->getProvider($providerName);
     if ($providerConfig === null) {
         $app['logger.system']->debug('[ClientLogin][Provider]: Request provider did not match any configured providers.', ['event' => 'extensions']);
         throw new Exception\InvalidAuthorisationRequestException('Authentication configuration error. Unable to proceed!');
     }
     if ($providerConfig['enabled'] !== true && $providerName !== 'Generic') {
         $app['logger.system']->debug('[ClientLogin][Provider]: Request provider was disabled.', ['event' => 'extensions']);
         throw new Exception\InvalidAuthorisationRequestException('Authentication configuration error. Unable to proceed!');
     }
     if ($providerName === 'Local' && !isset($app['boltforms'])) {
         throw new \RuntimeException('Local handler requires BoltForms (v2.5.0 or later preferred).');
     }
     $handlerKey = $this->getHandlerKey($providerName);
     $app['clientlogin.handler'] = $app->share(function ($app) use($app, $handlerKey) {
         return $app[$handlerKey]([]);
     });
     $this->provider = $app['clientlogin.handler'];
 }
 public function testGetProvider()
 {
     $providers = array('Local', 'Facebook', 'Google', 'Github', 'Generic');
     $config = new Config(array(), 'http://example.com');
     foreach ($providers as $provider) {
         $provider = $config->getProvider($provider);
         $this->assertArrayHasKey('enabled', $provider);
         $this->assertArrayHasKey('clientId', $provider);
         $this->assertArrayHasKey('clientSecret', $provider);
         $this->assertArrayHasKey('scopes', $provider);
         $this->assertFalse($provider['enabled']);
     }
 }