/** * @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)); }
/** * @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'); }
/** * @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()); } }); }