/** * */ public function deleteAction() { $this->clientMapper->removeByUuid($this->params('uuid')); $this->getConsole()->writeLine(); $this->getConsole()->writeLine('* Client removed *', Color::GREEN); }
/** * @param RequestInterface $request * @param ResponseInterface $response * * @return bool */ public function validateRequest(RequestInterface $request, ResponseInterface $response) { $providerName = $request->request('provider'); $providerUserId = $request->request('provider_user_id'); $providerAccessToken = $request->request('provider_access_token'); if (!$providerName || !$providerUserId || !$providerAccessToken) { $response->setError(400, 'invalid_request', 'One or more missing parameter: "provider", "provider_user_id" and "provider_access_token" are required'); return false; } $provider = isset($this->providers[$providerName]) ? $this->providers[$providerName] : null; if (!$provider instanceof ProviderInterface) { $response->setError(400, 'invalid_request', 'Unknown provider selected'); return false; } try { $errorMessage = ''; if (!$provider->validate($providerUserId, $providerAccessToken, $errorMessage)) { $response->setError(401, 'invalid_grant', 'Invalid third party credentials: ' . $errorMessage); return false; } } catch (ClientException $e) { $response->setError($e->getCode(), 'provider_client_error', $e->getMessage()); return false; } catch (Exception $e) { $response->setError(500, 'provider_error', $e->getMessage()); return false; } $token = $request->request('access_token'); $accessToken = $token ? $this->accessTokenMapper->findByToken($token) : null; if ($accessToken instanceof Entity\AccessToken && $accessToken->isExpired()) { $response->setError(401, 'invalid_grant', 'Access token is expired'); return false; } $thirdPartyUser = $this->thirdPartyMapper->findByProvider($provider); switch (true) { // a known user tries to connect with third party credentials owned by another user? issue an error case $accessToken instanceof Entity\AccessToken && $thirdPartyUser instanceof Entity\ThirdParty && $thirdPartyUser->getUser() !== $accessToken->getUser(): $response->setError(400, 'invalid_request', 'Another user is already registered with same credentials'); return false; // known third party credentials? update the data and grab the user form it // known third party credentials? update the data and grab the user form it case $thirdPartyUser instanceof Entity\ThirdParty: $thirdPartyUser->setData($provider->getUserData()); $user = $thirdPartyUser->getUser(); break; // valid access token? grab the user form it // valid access token? grab the user form it case $accessToken instanceof Entity\AccessToken: $user = $accessToken->getUser(); break; // no third party credentials or access token? it's a new user // no third party credentials or access token? it's a new user default: $userClass = $this->moduleOptions->getUserEntityClassName(); $user = new $userClass(); } // in case 3 and 4 we need to connect the user with new third party credentials if (!$thirdPartyUser instanceof Entity\ThirdParty) { $this->connectUserToThirdParty($user, $provider); } $this->userMapper->save($user); $this->user = $user; return true; }