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;
}
}
}