X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/a6633642232efd164d4708967ab59e498fbff896..refs/pull/3083/head:/app/Console/Commands/CreateAdmin.php diff --git a/app/Console/Commands/CreateAdmin.php b/app/Console/Commands/CreateAdmin.php index 3d1a3dca0..8c273bc1f 100644 --- a/app/Console/Commands/CreateAdmin.php +++ b/app/Console/Commands/CreateAdmin.php @@ -4,6 +4,10 @@ namespace BookStack\Console\Commands; use BookStack\Auth\UserRepo; use Illuminate\Console\Command; +use Illuminate\Support\Facades\Validator; +use Illuminate\Validation\Rules\Password; +use Illuminate\Validation\Rules\Unique; +use Symfony\Component\Console\Command\Command as SymfonyCommand; class CreateAdmin extends Command { @@ -38,46 +42,46 @@ class CreateAdmin extends Command /** * Execute the console command. * - * @return mixed * @throws \BookStack\Exceptions\NotFoundException + * + * @return mixed */ public function handle() { - $email = trim($this->option('email')); - if (empty($email)) { - $email = $this->ask('Please specify an email address for the new admin user'); - } - if (mb_strlen($email) < 5 || !filter_var($email, FILTER_VALIDATE_EMAIL)) { - return $this->error('Invalid email address provided'); - } + $details = $this->options(); - if ($this->userRepo->getByEmail($email) !== null) { - return $this->error('A user with the provided email already exists!'); + if (empty($details['email'])) { + $details['email'] = $this->ask('Please specify an email address for the new admin user'); } - - $name = trim($this->option('name')); - if (empty($name)) { - $name = $this->ask('Please specify an name for the new admin user'); + if (empty($details['name'])) { + $details['name'] = $this->ask('Please specify a name for the new admin user'); } - if (mb_strlen($name) < 2) { - return $this->error('Invalid name provided'); + if (empty($details['password'])) { + $details['password'] = $this->ask('Please specify a password for the new admin user (8 characters min)'); } - $password = trim($this->option('password')); - if (empty($password)) { - $password = $this->secret('Please specify a password for the new admin user'); - } - if (mb_strlen($password) < 5) { - return $this->error('Invalid password provided, Must be at least 5 characters'); - } + $validator = Validator::make($details, [ + 'email' => ['required', 'email', 'min:5', new Unique('users', 'email')], + 'name' => ['required', 'min:2'], + 'password' => ['required', Password::default()], + ]); + if ($validator->fails()) { + foreach ($validator->errors()->all() as $error) { + $this->error($error); + } - $user = $this->userRepo->create(['email' => $email, 'name' => $name, 'password' => $password]); + return SymfonyCommand::FAILURE; + } + + $user = $this->userRepo->create($validator->validated()); $this->userRepo->attachSystemRole($user, 'admin'); $this->userRepo->downloadAndAssignUserAvatar($user); $user->email_confirmed = true; $user->save(); $this->info("Admin account with email \"{$user->email}\" successfully created!"); + + return SymfonyCommand::SUCCESS; } }