コード例 #1
0
 public function testDefaultCallbackThrowsException()
 {
     $options = new ModuleOptions([]);
     $createUserCallable = $options->getCreateUserCallable();
     $this->setExpectedException('ZfrOAuth2\\Server\\Exception\\OAuth2Exception');
     $createUserCallable();
 }
 /**
  * {@inheritDoc}
  */
 public function createTokenResponse(ServerRequestInterface $request, Client $client = null, TokenOwnerInterface $owner = null)
 {
     $postParams = $request->getParsedBody();
     $providerName = isset($postParams['provider']) ? $postParams['provider'] : null;
     $scope = isset($postParams['scope']) ? $postParams['scope'] : null;
     if ($providerName === null) {
         throw OAuth2Exception::invalidRequest('Provider name is missing.');
     }
     $provider = $this->providerManager->findByName($providerName);
     if (!$provider || !$this->providerClients->has($providerName)) {
         throw OAuth2Exception::invalidRequest(sprintf('Provider %s is not supported', $providerName));
     }
     $providerUser = $this->findProviderUserFromRequest($request, $provider);
     // access token is valid
     $userProvider = $this->userProviderManager->findByProviderUid($providerUser->getId(), $provider);
     if (!$userProvider) {
         // access token is valid but the user does not exists
         $createUserCallable = $this->options->getCreateUserCallable();
         // by default, we expect the callable to return instance of "Hrevert\OauthClient\Model\UserProviderInterface"
         // because the developer may have extended the default implementation
         // Alternatively the callable may return user entity directly
         $userProvider = $createUserCallable($providerUser);
         if ($userProvider instanceof UserInterface) {
             $user = $userProvider;
             $userProvider = new UserProvider();
             $userProvider->setUser($user);
         }
         $userProvider->setProviderUid($providerUser->getId());
         $userProvider->setProvider($provider);
         $this->objectManager->persist($userProvider);
         $this->objectManager->flush();
     }
     /** @var TokenOwnerInterface $owner */
     $owner = $userProvider->getUser();
     // Everything is okay, we can start tokens generation!
     $accessToken = new AccessToken();
     $this->populateToken($accessToken, $client, $owner, $scope);
     /** @var AccessToken $accessToken */
     $accessToken = $this->accessTokenService->createToken($accessToken);
     // Before generating a refresh token, we must make sure the authorization server supports this grant
     $refreshToken = null;
     if ($this->authorizationServer->hasGrant(RefreshTokenGrant::GRANT_TYPE)) {
         $refreshToken = new RefreshToken();
         $this->populateToken($refreshToken, $client, $owner, $scope);
         /** @var RefreshToken $refreshToken */
         $refreshToken = $this->refreshTokenService->createToken($refreshToken);
     }
     return $this->prepareTokenResponse($accessToken, $refreshToken);
 }