public function indexAction(Request $request, $provider)
 {
     try {
         // get previous url
         $session = $request->getSession();
         $loginUrl = $this->getRequest()->headers->get('referer');
         // make sure we find the configuration
         if ($this->container->hasParameter($provider) && !$this->getUser()) {
             // get current configuration for provider
             $configs = $this->container->getParameter($provider);
             if ($provider == 'twitter') {
                 define('TWITTER_CONSUMER_KEY', $configs['api_key']);
                 define('TWITTER_CONSUMER_SECRET', $configs['api_secret']);
                 define('TWITTER_OAUTH_CALLBACK', $this->getRequest()->getUri());
                 if (!$session->get('oauth_token')) {
                     $connection = new \TwitterOAuth(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET);
                     $request_token = $connection->getRequestToken(TWITTER_OAUTH_CALLBACK);
                     $session->set('oauth_token', $request_token['oauth_token']);
                     $session->set('oauth_token_secret', $request_token['oauth_token_secret']);
                     switch ($connection->http_code) {
                         case 200:
                             return $this->redirect($connection->getAuthorizeURL($request_token['oauth_token']));
                             break;
                         default:
                             throw new \Exception('Could not connect to Twitter. Refresh the page or try again later.');
                             break;
                     }
                 } else {
                     $connection = new \TwitterOAuth(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET, $session->get('oauth_token'), $session->get('oauth_token_secret'));
                     $access_token = $connection->getAccessToken($request->get('oauth_verifier'));
                     $session->set('access_token', $access_token);
                     $content = $connection->get('account/verify_credentials');
                     $this->findUser($provider, array('id' => (string) $content->id, 'first_name' => (string) $content->name, 'last_name' => (string) $content->name, 'email' => (string) $content->id . '@twitter.com'));
                 }
             } elseif ($provider == 'google') {
                 // include google library
                 include dirname(__DIR__) . '/Vendor/Google/autoload.php';
                 $client = new \Google_Client();
                 $client->addScope("email");
                 $client->addScope("profile");
                 $client->setClientId($configs['api_key']);
                 $client->setClientSecret($configs['api_secret']);
                 $client->setRedirectUri($this->get_clean_url($this->getRequest()->getUri()));
                 if ($request->get('code', false)) {
                     $client->authenticate($request->get('code'));
                     $service = new \Google_Service_Oauth2($client);
                     $user = $service->userinfo->get();
                     //get user info
                     $this->findUser($provider, array('id' => (string) $user->id, 'first_name' => (string) $user->givenName, 'last_name' => (string) $user->familyName, 'email' => (string) $user->email));
                 } else {
                     return $this->redirect($client->createAuthUrl());
                 }
             } elseif ($provider == 'facebook') {
                 $facebook = new \FaceBook($configs['api_key'], $configs['api_secret'], $this->getRequest()->getUri());
                 if (!$facebook->is_authenticated()) {
                     return $this->redirect($facebook->get_redirect_url());
                 } else {
                     $this->findUser($provider, $facebook->get_user($session));
                 }
             } elseif ($provider == 'linkedin') {
                 $linkedin = new \LinkedIn($configs['api_key'], $configs['api_secret'], $this->getRequest()->getUri());
                 if (!$linkedin->is_authenticated()) {
                     return $this->redirect($linkedin->get_redirect_url());
                 } else {
                     $this->findUser($provider, $linkedin->get_user($session));
                 }
             }
         }
     } catch (\Exception $e) {
         $this->get('session')->getFlashBag()->add('error', $e->getMessage());
     }
     return $this->redirect($this->generateUrl($this->container->getParameter('login_path')));
 }