setDescription('Set user password in Phraseanet') ->addOption('user_id', null, InputOption::VALUE_REQUIRED, 'The id of user.') ->addOption('generate', null, InputOption::VALUE_NONE, 'Generate the password') ->addOption('password', null, InputOption::VALUE_OPTIONAL, 'The password') ->addOption('send_mail_password', null, InputOption::VALUE_NONE, 'Send email link to user for password renewing, work only if password and generate are not define') ->addOption('password_hash', null, InputOption::VALUE_OPTIONAL, 'Define a password hashed, work only with password_nonce') ->addOption('password_nonce', null, InputOption::VALUE_OPTIONAL, 'Define a password nonce, work only with password_hash') ->addOption('get_hash', null, InputOption::VALUE_NONE, 'return the password hashed') ->setHelp(''); return $this; } protected function doExecute(InputInterface $input, OutputInterface $output) { $dialog = $this->getHelperSet()->get('dialog'); $userRepository = $this->container['repo.users']; $userManipulator = $this->container['manipulator.user']; $user = $userRepository->find($input->getOption('user_id')); $password = $input->getOption('password'); $generate = $input->getOption('generate'); $sendMailPassword = $input->getOption('send_mail_password'); $getHash = $input->getOption('get_hash'); $passwordHash = $input->getOption('password_hash'); $passwordNonce = $input->getOption('password_nonce'); if ($user === null) { $output->writeln('Not found User.'); return 0; } if ($passwordHash && $passwordNonce) { $user->setNonce($passwordNonce); $user->setPassword($passwordHash); $userManipulator->updateUser($user); $output->writeln('password set with hashed pass'); return 0; } if ($generate) { $password = $this->container['random.medium']->generateString(64); } else { if (!$password && $sendMailPassword) { $this->sendPasswordSetupMail($user); return 0; } elseif (!$password && !$sendMailPassword && ! $getHash) { $output->writeln('choose one option to set a password!'); return 0; } } if ($password) { do { $continue = mb_strtolower($dialog->ask($output, 'Do you want really set password to this user? (y/N)', 'N')); } while (!in_array($continue, ['y', 'n'])); if ($continue !== 'y') { $output->writeln('Aborting !'); return; } $userManipulator->setPassword($user,$password); } if (($password || $generate || $getHash) && $user->getPassword()) { $hash = [ 'password' => $user->getPassword(), 'nonce' => $user->getNonce() ]; echo json_encode($hash); } elseif (is_null($password)) { $output->writeln('password undefined'); } return 0; } /** * Send mail for renew password * @param User $user */ private function sendPasswordSetupMail(User $user) { $this->setDelivererLocator(new LazyLocator($this->container, 'notification.deliverer')); $receiver = Receiver::fromUser($user); $token = $this->container['manipulator.token']->createResetPasswordToken($user); $mail = MailRequestPasswordSetup::create($this->container, $receiver); $servername = $this->container['conf']->get('servername'); $mail->setButtonUrl('http://'.$servername.'/login/renew-password/?token='.$token->getValue()); $mail->setLogin($user->getLogin()); $this->deliver($mail); } }