setDescription('Change the password of a user.') ->setDefinition([ new InputArgument('username', InputArgument::REQUIRED, 'The username'), new InputArgument('password', InputArgument::OPTIONAL, 'The password'), ]) ->setHelp( <<<'EOT' The kimai:user:password command changes the password of a user: php %command.full_name% matthieu This interactive shell will first ask you for a password. You can alternatively specify the password as a second argument: php %command.full_name% susan_super newpassword EOT ); } protected function execute(InputInterface $input, OutputInterface $output): int { $username = $input->getArgument('username'); if (null !== $input->getArgument('password')) { $password = $input->getArgument('password'); } else { $password = $this->askForPassword($input, $output); } $user = $this->userService->findUserByUsernameOrThrowException($username); $io = new SymfonyStyle($input, $output); try { $user->setPlainPassword($password); $this->userService->updateUser($user, ['PasswordUpdate']); $io->success(\sprintf('Changed password for user "%s".', $username)); } catch (ValidationFailedException $ex) { $this->validationError($ex, $io); return Command::FAILURE; } return Command::SUCCESS; } }