* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace FOS\UserBundle\Command; use FOS\UserBundle\Util\UserManipulator; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Question\Question; class ChangePasswordCommand extends Command { protected static $defaultName = 'fos:user:change-password'; private $userManipulator; public function __construct(UserManipulator $userManipulator) { parent::__construct(); $this->userManipulator = $userManipulator; } /** * {@inheritdoc} */ protected function configure() { $this ->setName('fos:user:change-password') ->setDescription('Change the password of a user.') ->setDefinition(array( new InputArgument('username', InputArgument::REQUIRED, 'The username'), new InputArgument('password', InputArgument::REQUIRED, 'The password'), )) ->setHelp(<<<'EOT' The fos:user:change-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% matthieu mypassword EOT ); } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $username = $input->getArgument('username'); $password = $input->getArgument('password'); $this->userManipulator->changePassword($username, $password); $output->writeln(sprintf('Changed password for user %s', $username)); } /** * {@inheritdoc} */ protected function interact(InputInterface $input, OutputInterface $output) { $questions = array(); if (!$input->getArgument('username')) { $question = new Question('Please give the username:'); $question->setValidator(function ($username) { if (empty($username)) { throw new \Exception('Username can not be empty'); } return $username; }); $questions['username'] = $question; } if (!$input->getArgument('password')) { $question = new Question('Please enter the new password:'); $question->setValidator(function ($password) { if (empty($password)) { throw new \Exception('Password can not be empty'); } return $password; }); $question->setHidden(true); $questions['password'] = $question; } foreach ($questions as $name => $question) { $answer = $this->getHelper('question')->ask($input, $output, $question); $input->setArgument($name, $answer); } } }