<?php namespace RVR\Cli; use SokoWeb\PersistentData\PersistentDataManager; use RVR\Repository\OAuthClientRepository; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; class AddOAuthRedirectUriCommand extends Command { public function configure(): void { $this->setName('oauth:add-redirect-uri') ->setDescription('Adding of redirect URI for OAuth client.') ->addArgument('client_id', InputArgument::REQUIRED, 'The OAuth client ID') ->addArgument('redirect_uris', InputArgument::IS_ARRAY, 'Redirect URIs to add'); } public function execute(InputInterface $input, OutputInterface $output): int { $oAuthClientRepository = new OAuthClientRepository(); $oAuthClient = $oAuthClientRepository->getByClientId($input->getArgument('client_id')); if ($oAuthClient === null) { $output->writeln('<error>OAuth client does not exist!</error>'); return 1; } $redirectUris = array_unique(array_merge($oAuthClient->getRedirectUrisArray(), $input->getArgument('redirect_uris'))); $oAuthClient->setRedirectUrisArray($redirectUris); try { $pdm = new PersistentDataManager(); $pdm->saveToDb($oAuthClient); } catch (\Exception $e) { $output->writeln('<error>Adding redirect URI failed!</error>'); $output->writeln(''); $output->writeln((string) $e); $output->writeln(''); return 1; } $redirectUrisToPrint = []; foreach ($redirectUris as $redirectUri) $redirectUrisToPrint[] = '* ' . $redirectUri; $output->writeln('<info>Redirect URIS were successfully added! Current URIs:' . "\n" . implode("\n", $redirectUrisToPrint) . '</info>'); return 0; } }