setName('oauth:client:createRedirects')
->setDescription('Create OAuht client for uri\'s.')
->setHelp('This command allows you to create an OAuth client with many uri\'s')
->addOption(
'redirect_uri', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'OAuth Redirect URI. Example: http://127.0.0.1/ftth/login_check'
)
->addOption(
'client_id', null, InputOption::VALUE_OPTIONAL, 'OAuth Client random Id'
)
->addOption(
'client_secret', null, InputOption::VALUE_OPTIONAL, 'OAuth Client random Secret'
);
}
/**
* @param InputInterface $input
* @param OutputInterface $output
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$redirectUri = $input->getOption('redirect_uri');
$random = $input->getOption('client_id');
$secret = $input->getOption('client_secret');
$client = $this->createClient($redirectUri, $random, $secret);
$output->writeln('OAUTH_CLIENT_ID=' . $client->getPublicId());
$output->writeln('OAUTH_CLIENT_SECRET=' . $client->getSecret());
}
/**
* @param array $redirectUri
* @param string $random
* @param string $secret
*
* @return OAuthClient
*/
protected function createClient($redirectUri, $random = null, $secret = null)
{
/* @var $clientManager ClientManager */
$clientManager = $this->getContainer()->get('fos_oauth_server.client_manager.default');
$em = $this->getContainer()->get('doctrine')->getEntityManager();
$newUri = [];
foreach ($redirectUri as $uri) {
$client = $em->getRepository('BaseOAuthServerBundle:OAuthClient')->findOneByRedirectUri($uri);
if (!$client) {
// agrego las uri que no estan cargadas en la tabla
$newUri[] = $uri;
}
}
if (count($newUri) > 0) {
/* @var $client OAuthClient */
$client = $clientManager->createClient();
if ($random) {
$client->setRandomId($random);
}
if ($secret) {
$client->setSecret($secret);
}
$client->setRedirectUris(
$newUri
);
$client->setAllowedGrantTypes(array_keys(OAuthClient::getGrantTypesChoices()));
$clientManager->updateClient($client);
}
return $client;
}
}