|
|
@ -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); |
|
|
|
} |
|
|
|
} |