| 
						
						
						
					 | 
				
				 | 
				
					@ -0,0 +1,134 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					<?php | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					namespace App\Commands; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use Illuminate\Console\Scheduling\Schedule; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use LaravelZero\Framework\Commands\Command; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use Illuminate\Support\Facades\File; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use App\Facades\Install; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use Hackzilla\PasswordGenerator\Generator\ComputerPasswordGenerator; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					use Hackzilla\PasswordGenerator\RandomGenerator\Php7RandomGenerator; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					/** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 * | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					 */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					class MariadbAddCommand extends Command | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // destination for username and password
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    const MCP_LOG_FILE = '/root/mcp.log'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // length for password
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    const NAME_LENGTH = 15; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // length for password
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    const PASSWORD_LENGTH = 40; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * The signature of the command. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @var string | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    protected $signature = 'mariadb:add {--ssl}'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * The description of the command. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @var string | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    protected $description = 'Add Mariadb User and Database'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * Execute the console command. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     * @return mixed | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    public function handle() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // enter root password
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $password = $this->secret('Enter root password'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // connect database
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            $mysqli = new \mysqli('127.0.0.1', 'root', $password); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } catch(\ErrorException $exception) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            $this->error('Failed! '.$exception->getMessage()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            exit(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $this->info('Mariadb Create Database...'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // generate password
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $generator = new ComputerPasswordGenerator(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $generator->setRandomGenerator(new Php7RandomGenerator()) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ->setUppercase() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ->setLowercase() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ->setUppercase() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ->setNumbers() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ->setSymbols(false) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ->setLength(self::PASSWORD_LENGTH); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // getting password
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $password = $generator->generatePasswords(1)[0]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $generator = new ComputerPasswordGenerator(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $generator->setRandomGenerator(new Php7RandomGenerator()) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ->setUppercase(false) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ->setLowercase(false) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ->setUppercase(false) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ->setNumbers() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ->setSymbols(false) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ->setLength(self::NAME_LENGTH); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // getting names
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $names = $generator->generatePasswords(2); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $database = 'db'.$names[0]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $username = 'u'.$names[1]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // getting option for ssl
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $ssl = $this->option('ssl'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $mysqli->query("CREATE DATABASE $database DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if ($ssl === false) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            $mysqli->query("CREATE USER $username@localhost IDENTIFIED BY '$password'"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            $mysqli->query("CREATE USER $username@'%' IDENTIFIED BY '$password'"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if ($mysqli->error) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            $this->error('Failed! '.$mysqli->error); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            $mysqli->query("DROP DATABASE IF EXISTS $database"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            $mysqli->query("DROP USER $username@localhost"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            $mysqli->query("DROP USER $username@'%'"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            exit(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $mysqli->query("GRANT ALL PRIVILEGES ON $database.* TO $username@localhost"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if ($ssl === true) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            $mysqli->query("GRANT ALL PRIVILEGES ON $database.* TO $username@'%' require ssl"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if ($mysqli->error) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            $this->error('Failed! '.$mysqli->error); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            $mysqli->query("DROP DATABASE IF EXISTS $database"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            $mysqli->query("DROP USER $username@localhost"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            $mysqli->query("DROP USER $username@'%'"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            exit(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $mysqli->query("FLUSH PRIVILEGES"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $mysqli->close(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $this->info('Success! \o/ Check /root/mcp.log'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        file_put_contents(self::MCP_LOG_FILE, "Mariadb $database created\nuser: $username\npassword: $password\n--\n", FILE_APPEND); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} |