예제 #1
0
 /**
  * @param Extension $extension
  * @param User      $extension
  */
 public function persist(Extension $extension, User $user)
 {
     $this->redisClient->hset(self::EXTENSION_HASH_STORE, $extension->getName(), $extension->serialize());
     $this->redisClient->hset(self::EXTENSION2USER_HASH_STORE, $extension->getName(), $user->getName());
     $meta = ['watchers' => $extension->getStars(), 'stars' => $extension->getWatchers()];
     $this->redisClient->hset(self::EXTENSIONMETA_HASH_STORE, $extension->getName(), json_encode($meta));
 }
예제 #2
0
 /**
  * @param string $provider
  *
  * @throws \ErrorException
  */
 public function loginWithProviderAction($provider)
 {
     $providerKey = 'authentication.provider.' . $provider;
     // Check if provider exist
     if (!$this->app->container->has($providerKey)) {
         $this->app->notFound();
     }
     /* @var $authorizationProvider ProviderInterface */
     $authorizationProvider = $this->app->container->get($providerKey);
     $token = $authorizationProvider->handleAuth($this->app);
     $_SESSION[$provider . '.token'] = $token;
     $providerMetadata = $authorizationProvider->getUserDetails($token);
     if (empty($providerMetadata->getEmail()) || empty($providerMetadata->getUid())) {
         $this->app->flash('error', 'User details incomplete. Unable to fetch user');
         $this->app->redirect('/login');
     }
     // Fetch or persist user from repository
     /* @var $userRepository UserRepository */
     $userRepository = $this->app->container->get('user.repository');
     $user = $userRepository->find($providerMetadata->getEmail());
     if (is_null($user)) {
         $user = $userRepository->findByProviderId($provider, $providerMetadata->getUid());
         if (is_null($user)) {
             $user = new User();
             $user->setEmail($providerMetadata->getEmail())->setNickname($providerMetadata->getNickName())->setName($providerMetadata->getRealName())->setPicture($providerMetadata->getProfilePicture())->setLocation($providerMetadata->getLocation())->addProviderMetadata($provider, $providerMetadata);
             $userRepository->persist($user);
         }
     }
     // Complete information if needed
     if (!$user->hasProviderMetadata($provider)) {
         $user->addProviderMetadata($provider, $providerMetadata);
         if (empty($user->getPicture())) {
             $user->setPicture($providerMetadata->getProfilePicture());
         }
         if (empty($user->getLocation())) {
             $user->setLocation($providerMetadata->getLocation());
         }
         $userRepository->persist($user);
     }
     // persist user in session
     $_SESSION['user'] = $user->getId();
     $this->app->redirect('/profile');
 }
예제 #3
0
 /**
  * @param User $user
  */
 public function remove(User $user)
 {
     $this->redisClient->transaction(function (MultiExec $tx) use($user) {
         $id = $user->getId();
         $tx->hdel(self::USER_HASH_STORE, $id);
         if (!empty($user->getGithubId())) {
             $tx->hdel('github_' . self::USER_HASH_STORE, $user->getGithubId());
         }
         if (!empty($user->getGoogleId())) {
             $tx->hdel('google_' . self::USER_HASH_STORE, $user->getGoogleId());
         }
         if (!empty($user->getBitbucketId())) {
             $tx->hdel('bitbucket_' . self::USER_HASH_STORE, $user->getBitbucketId());
         }
     });
 }