/**
  * {@inheritdoc}
  */
 public function createRefreshToken(ClientInterface $client, ResourceOwnerInterface $resource_owner, array $scope = [], array $metadatas = [])
 {
     $refresh_token = $this->createEmptyRefreshToken();
     $refresh_token->setScope($scope);
     if ($resource_owner instanceof UserAccountInterface) {
         $refresh_token->setResourceOwnerPublicId($resource_owner->getUserPublicId());
         $refresh_token->setUserAccountPublicId($resource_owner->getPublicId());
     } else {
         $refresh_token->setResourceOwnerPublicId($resource_owner->getPublicId());
     }
     $refresh_token->setClientPublicId($client->getPublicId());
     $refresh_token->setExpiresAt(time() + $this->getLifetime($client));
     $refresh_token->setToken($this->generateToken());
     $refresh_token->setMetadatas($metadatas);
     $this->updateRefreshToken($refresh_token);
     $this->saveRefreshToken($refresh_token);
     return $refresh_token;
 }
 /**
  * {@inheritdoc}
  */
 public function createAccessToken(ClientInterface $client, ResourceOwnerInterface $resource_owner, array $token_type_parameters, array $request_parameters, array $scope = [], RefreshTokenInterface $refresh_token = null, ClientInterface $resource_server = null, array $metadatas = [])
 {
     $access_token = $this->createEmptyAccessToken();
     $access_token->setExpiresAt(time() + $this->getLifetime($client));
     $access_token->setScope($scope);
     if ($resource_owner instanceof UserAccountInterface) {
         $access_token->setResourceOwnerPublicId($resource_owner->getUserPublicId());
         $access_token->setUserAccountPublicId($resource_owner->getPublicId());
     } else {
         $access_token->setResourceOwnerPublicId($resource_owner->getPublicId());
     }
     $access_token->setClientPublicId($client->getPublicId());
     $access_token->setRefreshToken(null === $refresh_token ? null : $refresh_token->getToken());
     $access_token->setMetadatas($metadatas);
     foreach ($token_type_parameters as $key => $value) {
         $access_token->setParameter($key, $value);
     }
     $this->updateAccessToken($access_token);
     $this->populateAccessToken($access_token, $client, $resource_owner, $refresh_token, $resource_server);
     $this->saveAccessToken($access_token);
     return $access_token;
 }