userRepo = $userRepo; parent::__construct(); } /** * Execute the console command. * * @throws NotFoundException * * @return mixed */ public function handle() { $details = $this->snakeCaseOptions(); if (empty($details['email'])) { $details['email'] = $this->ask('Please specify an email address for the new admin user'); } if (empty($details['name'])) { $details['name'] = $this->ask('Please specify a name for the new admin user'); } if (empty($details['password'])) { if (empty($details['external_auth_id'])) { $details['password'] = $this->ask('Please specify a password for the new admin user (8 characters min)'); } else { $details['password'] = Str::random(32); } } $validator = Validator::make($details, [ 'email' => ['required', 'email', 'min:5', new Unique('users', 'email')], 'name' => ['required', 'min:2'], 'password' => ['required_without:external_auth_id', Password::default()], 'external_auth_id' => ['required_without:password'], ]); if ($validator->fails()) { foreach ($validator->errors()->all() as $error) { $this->error($error); } 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; } protected function snakeCaseOptions(): array { $returnOpts = []; foreach ($this->options() as $key => $value) { $returnOpts[str_replace('-', '_', $key)] = $value; } return $returnOpts; } }