diff --git a/core/Command/UserCreateCommand.php b/core/Command/UserCreateCommand.php new file mode 100644 index 0000000..5715663 --- /dev/null +++ b/core/Command/UserCreateCommand.php @@ -0,0 +1,73 @@ +userFactory = $userFactory; + $this->entityManager = $entityManager; + + parent::__construct(); + } + + protected function configure() + { + $this + ->setDescription(self::$defaultDescription) + ->addArgument('email', InputArgument::OPTIONAL, 'E-mail') + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + $io = new SymfonyStyle($input, $output); + $helper = $this->getHelper('question'); + + $emailQuestion = new Question('E-mail: '); + $emailQuestion->setValidator(function ($value) { + return !empty($value); + }); + + $passwordQuestion = new Question('Password (leave empty to generate a random password): '); + $passwordQuestion->setHidden(true); + $isAdminQuestion = new ConfirmationQuestion('Is admin? [y/n] ', false); + $isWriterQuestion = new ConfirmationQuestion('Is writer? [y/n] ', false); + + $email = $input->getArgument('email'); + + if (empty($email)) { + $email = $helper->ask($input, $output, $emailQuestion); + } + + $password = $helper->ask($input, $output, $passwordQuestion); + $isAdmin = $helper->ask($input, $output, $isAdminQuestion); + $isWriter = $helper->ask($input, $output, $isWriterQuestion); + + $user = $this->userFactory->create($email, $password); + $user->setIsAdmin($isAdmin); + $user->setIsWriter($isWriter); + + $this->entityManager->create($user); + + $io->success('User created!'); + + return Command::SUCCESS; + } +} diff --git a/core/Factory/UserFactory.php b/core/Factory/UserFactory.php index c5e7905..ed21651 100644 --- a/core/Factory/UserFactory.php +++ b/core/Factory/UserFactory.php @@ -22,13 +22,17 @@ class UserFactory $this->encoder = $encoder; } - public function create(): User + public function create(?string $email = null, ?string $password = null): User { $entity = new User(); + if (!empty($email)) { + $entity->setEmail($email); + } + $entity->setPassword($this->encoder->encodePassword( $entity, - $this->tokenGenerator->generateToken() + !empty($password) ? $password : $this->tokenGenerator->generateToken() )); return $entity;