1 | <?php |
||||
2 | |||||
3 | /* |
||||
4 | * This file is part of the DoyoUserBundle project. |
||||
5 | * |
||||
6 | * (c) Anthonius Munthi <[email protected]> |
||||
7 | * |
||||
8 | * For the full copyright and license information, please view the LICENSE |
||||
9 | * file that was distributed with this source code. |
||||
10 | */ |
||||
11 | |||||
12 | declare(strict_types=1); |
||||
13 | |||||
14 | namespace Doyo\UserBundle\Command; |
||||
15 | |||||
16 | use Doyo\UserBundle\Manager\UserManagerInterface; |
||||
17 | use Symfony\Component\Console\Command\Command; |
||||
18 | use Symfony\Component\Console\Input\InputArgument; |
||||
19 | use Symfony\Component\Console\Input\InputInterface; |
||||
20 | use Symfony\Component\Console\Input\InputOption; |
||||
21 | use Symfony\Component\Console\Output\OutputInterface; |
||||
22 | use Symfony\Component\Console\Question\Question; |
||||
23 | |||||
24 | /** |
||||
25 | * @author Matthieu Bontemps <[email protected]> |
||||
26 | * @author Thibault Duplessis <[email protected]> |
||||
27 | * @author Luis Cordova <[email protected]> |
||||
28 | */ |
||||
29 | class CreateUserCommand extends Command |
||||
30 | { |
||||
31 | protected static $defaultName = 'doyo:user:create'; |
||||
32 | |||||
33 | /** |
||||
34 | * @var UserManagerInterface |
||||
35 | */ |
||||
36 | private $userManager; |
||||
37 | |||||
38 | 2 | public function __construct(UserManagerInterface $userManager) |
|||
39 | { |
||||
40 | 2 | parent::__construct(); |
|||
41 | |||||
42 | 2 | $this->userManager = $userManager; |
|||
43 | } |
||||
44 | |||||
45 | /** |
||||
46 | * {@inheritdoc} |
||||
47 | */ |
||||
48 | 2 | protected function configure() |
|||
49 | { |
||||
50 | $this |
||||
51 | 2 | ->setName('doyo:user:create') |
|||
52 | 2 | ->setDescription('Create a user.') |
|||
53 | 2 | ->setDefinition([ |
|||
54 | 2 | new InputArgument('username', InputArgument::REQUIRED, 'The username'), |
|||
55 | 2 | new InputArgument('email', InputArgument::REQUIRED, 'The email'), |
|||
56 | 2 | new InputArgument('password', InputArgument::REQUIRED, 'The password'), |
|||
57 | 2 | new InputOption('super-admin', null, InputOption::VALUE_NONE, 'Set the user as super admin'), |
|||
58 | 2 | new InputOption('inactive', null, InputOption::VALUE_NONE, 'Set the user as inactive'), |
|||
59 | ]) |
||||
60 | 2 | ->setHelp(<<<'EOT' |
|||
61 | 2 | The <info>doyo:user:create</info> command creates a user: |
|||
62 | |||||
63 | <info>php %command.full_name% matthieu</info> |
||||
64 | |||||
65 | This interactive shell will ask you for an email and then a password. |
||||
66 | |||||
67 | You can alternatively specify the email and password as the second and third arguments: |
||||
68 | |||||
69 | <info>php %command.full_name% matthieu [email protected] mypassword</info> |
||||
70 | |||||
71 | You can create a super admin via the super-admin flag: |
||||
72 | |||||
73 | <info>php %command.full_name% admin --super-admin</info> |
||||
74 | |||||
75 | You can create an inactive user (will not be able to log in): |
||||
76 | |||||
77 | <info>php %command.full_name% thibault --inactive</info> |
||||
78 | |||||
79 | EOT |
||||
80 | ); |
||||
81 | } |
||||
82 | |||||
83 | /** |
||||
84 | * {@inheritdoc} |
||||
85 | */ |
||||
86 | 2 | protected function execute(InputInterface $input, OutputInterface $output) |
|||
87 | { |
||||
88 | 2 | $username = $input->getArgument('username'); |
|||
89 | 2 | $email = $input->getArgument('email'); |
|||
90 | 2 | $password = $input->getArgument('password'); |
|||
91 | 2 | $inactive = $input->getOption('inactive'); |
|||
92 | 2 | $superadmin = $input->getOption('super-admin'); |
|||
93 | 2 | $manager = $this->userManager; |
|||
94 | 2 | $user = $manager->createUser(); |
|||
95 | |||||
96 | 2 | $user->setUsername($username) |
|||
0 ignored issues
–
show
Bug
introduced
by
![]() |
|||||
97 | 2 | ->setPlainPassword($password) |
|||
0 ignored issues
–
show
It seems like
$password can also be of type string[] ; however, parameter $plainPassword of Doyo\UserBundle\Model\Us...ace::setPlainPassword() does only seem to accept null|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
![]() |
|||||
98 | 2 | ->setEmail($email) |
|||
0 ignored issues
–
show
It seems like
$email can also be of type string[] ; however, parameter $email of Doyo\UserBundle\Model\UserInterface::setEmail() does only seem to accept null|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
![]() |
|||||
99 | 2 | ->setEnabled(!$inactive); |
|||
100 | |||||
101 | 2 | if ($superadmin) { |
|||
102 | $user->addRole('ROLE_SUPER_ADMIN'); |
||||
103 | } |
||||
104 | 2 | $manager->updateUser($user); |
|||
105 | |||||
106 | 2 | $output->writeln(sprintf('Created user <comment>%s</comment>', $username)); |
|||
0 ignored issues
–
show
It seems like
$username 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
![]() |
|||||
107 | } |
||||
108 | |||||
109 | /** |
||||
110 | * {@inheritdoc} |
||||
111 | */ |
||||
112 | 1 | protected function interact(InputInterface $input, OutputInterface $output) |
|||
113 | { |
||||
114 | 1 | $questions = []; |
|||
115 | |||||
116 | 1 | if (!$input->getArgument('username')) { |
|||
117 | 1 | $question = new Question('Please choose a username:'); |
|||
118 | $question->setValidator(function ($username) { |
||||
119 | if (empty($username)) { |
||||
120 | throw new \Exception('Username can not be empty'); |
||||
121 | } |
||||
122 | |||||
123 | return $username; |
||||
124 | 1 | }); |
|||
125 | 1 | $questions['username'] = $question; |
|||
126 | } |
||||
127 | |||||
128 | 1 | if (!$input->getArgument('email')) { |
|||
129 | 1 | $question = new Question('Please choose an email:'); |
|||
130 | $question->setValidator(function ($email) { |
||||
131 | if (empty($email)) { |
||||
132 | throw new \Exception('Email can not be empty'); |
||||
133 | } |
||||
134 | |||||
135 | return $email; |
||||
136 | 1 | }); |
|||
137 | 1 | $questions['email'] = $question; |
|||
138 | } |
||||
139 | |||||
140 | 1 | if (!$input->getArgument('password')) { |
|||
141 | 1 | $question = new Question('Please choose a password:'); |
|||
142 | $question->setValidator(function ($password) { |
||||
143 | if (empty($password)) { |
||||
144 | throw new \Exception('Password can not be empty'); |
||||
145 | } |
||||
146 | |||||
147 | return $password; |
||||
148 | 1 | }); |
|||
149 | 1 | $question->setHidden(true); |
|||
150 | 1 | $questions['password'] = $question; |
|||
151 | } |
||||
152 | |||||
153 | 1 | foreach ($questions as $name => $question) { |
|||
154 | 1 | $answer = $this->getHelper('question')->ask($input, $output, $question); |
|||
155 | 1 | $input->setArgument($name, $answer); |
|||
156 | } |
||||
157 | } |
||||
158 | } |
||||
159 |