| 
									
										
										
										
											2018-01-29 02:09:26 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace BookStack\Console\Commands; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-25 19:30:50 +08:00
										 |  |  | use BookStack\Auth\UserRepo; | 
					
						
							| 
									
										
										
										
											2018-01-29 02:09:26 +08:00
										 |  |  | use Illuminate\Console\Command; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class CreateAdmin extends Command | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * The name and signature of the console command. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @var string | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     protected $signature = 'bookstack:create-admin | 
					
						
							|  |  |  |                             {--email= : The email address for the new admin user} | 
					
						
							|  |  |  |                             {--name= : The name of the new admin user} | 
					
						
							|  |  |  |                             {--password= : The password to assign to the new admin user}'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * The console command description. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @var string | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     protected $description = 'Add a new admin user to the system'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     protected $userRepo; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Create a new command instance. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param UserRepo $userRepo | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function __construct(UserRepo $userRepo) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->userRepo = $userRepo; | 
					
						
							|  |  |  |         parent::__construct(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Execute the console command. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return mixed | 
					
						
							|  |  |  |      * @throws \BookStack\Exceptions\NotFoundException | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function handle() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $email = trim($this->option('email')); | 
					
						
							|  |  |  |         if (empty($email)) { | 
					
						
							|  |  |  |             $email = $this->ask('Please specify an email address for the new admin user'); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2019-05-25 23:14:57 +08:00
										 |  |  |         if (mb_strlen($email) < 5 || !filter_var($email, FILTER_VALIDATE_EMAIL)) { | 
					
						
							| 
									
										
										
										
											2018-01-29 02:09:26 +08:00
										 |  |  |             return $this->error('Invalid email address provided'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($this->userRepo->getByEmail($email) !== null) { | 
					
						
							|  |  |  |             return $this->error('A user with the provided email already exists!'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $name = trim($this->option('name')); | 
					
						
							|  |  |  |         if (empty($name)) { | 
					
						
							|  |  |  |             $name = $this->ask('Please specify an name for the new admin user'); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2019-05-25 23:14:57 +08:00
										 |  |  |         if (mb_strlen($name) < 2) { | 
					
						
							| 
									
										
										
										
											2018-01-29 02:09:26 +08:00
										 |  |  |             return $this->error('Invalid name provided'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $password = trim($this->option('password')); | 
					
						
							|  |  |  |         if (empty($password)) { | 
					
						
							|  |  |  |             $password = $this->secret('Please specify a password for the new admin user'); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2019-05-25 23:14:57 +08:00
										 |  |  |         if (mb_strlen($password) < 5) { | 
					
						
							| 
									
										
										
										
											2018-01-29 02:09:26 +08:00
										 |  |  |             return $this->error('Invalid password provided, Must be at least 5 characters'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $user = $this->userRepo->create(['email' => $email, 'name' => $name, 'password' => $password]); | 
					
						
							|  |  |  |         $this->userRepo->attachSystemRole($user, 'admin'); | 
					
						
							| 
									
										
										
										
											2018-12-23 03:29:19 +08:00
										 |  |  |         $this->userRepo->downloadAndAssignUserAvatar($user); | 
					
						
							| 
									
										
										
										
											2018-01-29 02:09:26 +08:00
										 |  |  |         $user->email_confirmed = true; | 
					
						
							|  |  |  |         $user->save(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->info("Admin account with email \"{$user->email}\" successfully created!"); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |