diff --git a/core/command/user/add.php b/core/command/user/add.php new file mode 100644 index 0000000000..cc11255255 --- /dev/null +++ b/core/command/user/add.php @@ -0,0 +1,115 @@ +userManager = $userManager; + $this->groupManager = $groupManager; + } + + protected function configure() { + $this + ->setName('user:add') + ->setDescription('adds a user') + ->addArgument( + 'uid', + InputArgument::REQUIRED, + 'User ID used to login (must only contain a-z, A-Z, 0-9, -, _ and @)' + ) + ->addOption( + 'password', + 'p', + InputOption::VALUE_OPTIONAL, + '' + ) + ->addOption( + 'display-name', + null, + InputOption::VALUE_OPTIONAL, + 'User name used in the web UI (can contain any characters)' + ) + ->addOption( + 'group', + 'g', + InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, + 'groups the user should be added to (The group will be created if it does not exist)' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output) { + $uid = $input->getArgument('uid'); + if ($this->userManager->userExists($uid)) { + $output->writeln('The user "' . $uid . '" already exists.'); + return; + } + + $password = $input->getOption('password'); + while (!$password) { + $question = new Question('Please enter a non-empty password:'); + $question->setHidden(true); + $question->setHiddenFallback(false); + + $helper = $this->getHelper('question'); + $password = $helper->ask($input, $output, $question); + } + + $user = $this->userManager->createUser( + $input->getArgument('uid'), + $password + ); + + if ($user instanceof IUser) { + $output->writeln('The user "' . $user->getUID() . '" was created successfully'); + } else { + $output->writeln('An error occurred while creating the user'); + } + + if ($input->getOption('display-name')) { + $user->setDisplayName($input->getOption('display-name')); + $output->writeln('Display name set to "' . $user->getDisplayName() . '"'); + } + + foreach ($input->getOption('group') as $groupName) { + $group = $this->groupManager->get($groupName); + if (!$group) { + $this->groupManager->createGroup($groupName); + $group = $this->groupManager->get($groupName); + $output->writeln('Created group "' . $group->getGID() . '"'); + } + $group->addUser($user); + $output->writeln('User "' . $user->getUID() . '" added to group "' . $group->getGID() . '"'); + } + } +} diff --git a/core/register_command.php b/core/register_command.php index 2328bc7685..ba0567787d 100644 --- a/core/register_command.php +++ b/core/register_command.php @@ -26,6 +26,7 @@ if (\OC::$server->getConfig()->getSystemValue('installed', false)) { $application->add(new OC\Core\Command\User\ResetPassword(\OC::$server->getUserManager())); $application->add(new OC\Core\Command\User\LastSeen()); $application->add(new OC\Core\Command\User\Delete(\OC::$server->getUserManager())); + $application->add(new OC\Core\Command\User\Add(\OC::$server->getUserManager(), \OC::$server->getGroupManager())); $application->add(new OC\Core\Command\L10n\CreateJs()); $application->add(new OC\Core\Command\Background\Cron(\OC::$server->getConfig())); $application->add(new OC\Core\Command\Background\WebCron(\OC::$server->getConfig()));