Issues (9)

src/Console/Command/Command.php (3 issues)

Labels
Severity
1
<?php
2
3
namespace Tarantool\JobQueue\Console\Command;
4
5
use Symfony\Component\Console\Command\Command as BaseCommand;
6
use Symfony\Component\Console\Input\InputArgument;
7
use Symfony\Component\Console\Input\InputInterface;
8
use Symfony\Component\Console\Input\InputOption;
9
use Symfony\Component\Console\Output\OutputInterface;
10
use Symfony\Component\Console\Question\Question;
11
use Tarantool\JobQueue\DefaultConfigFactory;
12
13
class Command extends BaseCommand
14
{
15
    private const DEFAULT_HOST = '127.0.0.1';
16
    private const DEFAULT_PORT = 3301;
17
    private const ENV_USER = 'TNT_JOBQUEUE_USER';
18
    private const ENV_PASSWORD = 'TNT_JOBQUEUE_PASSWORD';
19
20
    protected function configure(): void
21
    {
22
        $this
23
            ->addArgument('queue', InputArgument::REQUIRED)
24
            ->addOption('host', 'H', InputOption::VALUE_REQUIRED, '', self::DEFAULT_HOST)
25
            ->addOption('port', 'p', InputOption::VALUE_REQUIRED, '', self::DEFAULT_PORT)
26
            ->addOption('socket', 's', InputOption::VALUE_REQUIRED)
27
            ->addOption('user', 'u', InputOption::VALUE_REQUIRED)
28
            ->addOption('config', 'c', InputOption::VALUE_REQUIRED)
29
        ;
30
    }
31
32
    final protected function createConfigFactory(InputInterface $input, OutputInterface $output): DefaultConfigFactory
33
    {
34
        $customConfigPath = $input->getOption('config');
35
        if (null !== $customConfigPath && !is_readable($customConfigPath)) {
0 ignored issues
show
It seems like $customConfigPath can also be of type string[]; however, parameter $filename of is_readable() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

35
        if (null !== $customConfigPath && !is_readable(/** @scrutinizer ignore-type */ $customConfigPath)) {
Loading history...
36
            throw new \RuntimeException("The given configuration file '$customConfigPath' does not exist or it's not readable.");
37
        }
38
39
        $configFactory = $customConfigPath ? include $customConfigPath : new DefaultConfigFactory();
40
41
        if (null !== $socket = $input->getOption('socket')) {
42
            $configFactory->setConnectionUri("unix://$socket");
43
        } elseif ((false !== $input->getParameterOption('--host')) || !$configFactory->getConnectionUri()) {
44
            $uri = sprintf('tcp://%s:%s', $input->getOption('host'), $input->getOption('port'));
0 ignored issues
show
It seems like $input->getOption('host') can also be of type string[]; however, parameter $args of sprintf() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

44
            $uri = sprintf('tcp://%s:%s', /** @scrutinizer ignore-type */ $input->getOption('host'), $input->getOption('port'));
Loading history...
45
            $configFactory->setConnectionUri($uri);
46
        }
47
48
        $queueName = $input->getArgument('queue');
49
        $configFactory->setQueueName($queueName);
0 ignored issues
show
It seems like $queueName can also be of type null and string[]; however, parameter $name of Tarantool\JobQueue\Defau...Factory::setQueueName() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

49
        $configFactory->setQueueName(/** @scrutinizer ignore-type */ $queueName);
Loading history...
50
51
        $user = $input->getOption('user') ?: getenv(self::ENV_USER);
52
        if ($user) {
53
            if (!$password = getenv(self::ENV_PASSWORD)) {
54
                $helper = $this->getHelper('question');
55
                $question = new Question('Password: ');
56
                $question->setHidden(true);
57
                $question->setHiddenFallback(false);
58
                $password = $helper->ask($input, $output, $question);
59
            }
60
61
            $configFactory->setCredentials($user, $password);
62
        }
63
64
        return $configFactory;
65
    }
66
}
67