userManager = $userManager; $this->guestManager = $guestManager; $this->mailer = $mailer; } protected function configure() { $this ->setName('guests:add') ->setDescription('Add a new guest account') ->addArgument( 'created-by', InputArgument::REQUIRED, 'User ID who is set as creator' ) ->addArgument( 'email', InputArgument::REQUIRED, 'Email address' ) ->addOption( 'generate-password', null, InputOption::VALUE_NONE, 'Do not set an initial password' ) ->addOption( 'password-from-env', null, InputOption::VALUE_NONE, 'Read password from environment variable OC_PASS' ) ->addOption( 'display-name', null, InputOption::VALUE_OPTIONAL, 'User name used in the web UI (can contain any characters)', '' ) ->addOption( 'language', null, InputOption::VALUE_OPTIONAL, 'Language', '' ); parent::configure(); } protected function execute(InputInterface $input, OutputInterface $output) { $creatorUser = $this->userManager->get($input->getArgument('created-by')); if ($creatorUser === null) { $output->writeln('The user "' . $input->getArgument('created-by') . '" does not exist.'); return 1; } // same behavior like in the UsersController $uid = $input->getArgument('email'); if ($this->userManager->userExists($uid)) { $output->writeln('The user "' . $uid . '" already exists.'); return 1; } $email = $input->getArgument('email'); if (!$this->mailer->validateMailAddress($email)) { $output->writeln('Invalid email address "' . $email . '".'); return 1; } $password = null; if (!$input->getOption('generate-password')) { if ($input->getOption('password-from-env')) { $password = getenv('OC_PASS'); if (!$password) { $output->writeln('--password-from-env given, but OC_PASS is empty!'); return 1; } } elseif ($input->isInteractive()) { /** @var QuestionHelper $helper */ $helper = $this->getHelper('question'); $question = new Question('Enter password: '); $question->setHidden(true); $password = $helper->ask($input, $output, $question); $question = new Question('Confirm password: '); $question->setHidden(true); $confirm = $helper->ask($input, $output, $question); if ($password !== $confirm) { $output->writeln('Passwords did not match!'); return 1; } } else { $output->writeln('Interactive input or --password-from-env is needed for entering a password!'); return 1; } } $user = $this->guestManager->createGuest( $creatorUser, $uid, $email, $input->getOption('display-name') ?? '', $input->getOption('language') ?? '', $password ); if ($user instanceof IUser) { $output->writeln('The guest account user "' . $user->getUID() . '" was created successfully'); return 0; } else { $output->writeln('An error occurred while creating the user'); return 1; } } }