Improve database management for servers, fixes #181
This commit is contained in:
parent
723b608e0c
commit
1ad715f1a3
2 changed files with 27 additions and 15 deletions
|
@ -56,13 +56,12 @@ class DatabaseRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$db = new Models\Database;
|
$db = new Models\Database;
|
||||||
$db->fill([
|
$db->fill([
|
||||||
'server_id' => $server->id,
|
'server_id' => $server->id,
|
||||||
'db_server' => $options['db_server'],
|
'db_server' => $options['db_server'],
|
||||||
'database' => $server->uuidShort . '_' . $options['database'],
|
'database' => "s{$server->id}_{$options['database']}",
|
||||||
'username' => $server->uuidShort . '_' . str_random(7),
|
'username' => $server->uuidShort . '_' . str_random(7),
|
||||||
'remote' => $options['remote'],
|
'remote' => $options['remote'],
|
||||||
'password' => Crypt::encrypt(str_random(20))
|
'password' => Crypt::encrypt(str_random(20))
|
||||||
|
@ -90,16 +89,29 @@ class DatabaseRepository {
|
||||||
|
|
||||||
$capsule->setAsGlobal();
|
$capsule->setAsGlobal();
|
||||||
|
|
||||||
Capsule::statement('CREATE DATABASE ' . $db->database);
|
|
||||||
Capsule::statement('CREATE USER \'' . $db->username . '\'@\'' . $db->remote . '\' IDENTIFIED BY \'' . Crypt::decrypt($db->password) . '\'');
|
|
||||||
Capsule::statement('GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX ON ' . $db->database . '.* TO \'' . $db->username . '\'@\'' . $db->remote . '\'');
|
|
||||||
Capsule::statement('FLUSH PRIVILEGES');
|
|
||||||
|
|
||||||
DB::commit();
|
|
||||||
return true;
|
|
||||||
} catch (\Exception $ex) {
|
} catch (\Exception $ex) {
|
||||||
DB::rollback();
|
DB::rollBack();
|
||||||
throw $ex;
|
throw new DisplayException('There was an error while connecting to the Database Host Server. Please check the error logs.', $ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Capsule::statement('CREATE DATABASE `' . $db->database . '`');
|
||||||
|
Capsule::statement('CREATE USER `' . $db->username . '`@`' . $db->remote . '` IDENTIFIED BY \'' . Crypt::decrypt($db->password) . '\'');
|
||||||
|
Capsule::statement('GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX ON `' . $db->database . '`.* TO `' . $db->username . '`@`' . $db->remote . '`');
|
||||||
|
Capsule::statement('FLUSH PRIVILEGES');
|
||||||
|
DB::commit();
|
||||||
|
} catch (\Exception $ex) {
|
||||||
|
try {
|
||||||
|
Capsule::statement('DROP DATABASE `' . $db->database . '`');
|
||||||
|
Capsule::statement('DROP USER `' . $db->username . '`@`' . $db->remote . '`');
|
||||||
|
} catch (\Exception $exi) {
|
||||||
|
// ignore it, if it fails its probably
|
||||||
|
// because we failed to ever make the DB
|
||||||
|
// or the user on the system.
|
||||||
|
} finally {
|
||||||
|
DB::rollBack();
|
||||||
|
throw $ex;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,7 +150,7 @@ class DatabaseRepository {
|
||||||
|
|
||||||
$capsule->setAsGlobal();
|
$capsule->setAsGlobal();
|
||||||
Capsule::statement(sprintf(
|
Capsule::statement(sprintf(
|
||||||
'SET PASSWORD FOR \'%s\'@\'%s\' = PASSWORD(\'%s\')',
|
'SET PASSWORD FOR `%s`@`%s` = PASSWORD(\'%s\')',
|
||||||
$db->username,
|
$db->username,
|
||||||
$db->remote,
|
$db->remote,
|
||||||
$password
|
$password
|
||||||
|
@ -182,8 +194,8 @@ class DatabaseRepository {
|
||||||
|
|
||||||
$capsule->setAsGlobal();
|
$capsule->setAsGlobal();
|
||||||
|
|
||||||
Capsule::statement('DROP USER \'' . $db->username . '\'@\'' . $db->remote . '\'');
|
Capsule::statement('DROP USER `' . $db->username . '`@`' . $db->remote . '`');
|
||||||
Capsule::statement('DROP DATABASE ' . $db->database);
|
Capsule::statement('DROP DATABASE `' . $db->database . '`');
|
||||||
|
|
||||||
$db->delete();
|
$db->delete();
|
||||||
|
|
||||||
|
|
|
@ -373,7 +373,7 @@
|
||||||
<div class="form-group col-md-6">
|
<div class="form-group col-md-6">
|
||||||
<label class="control-label">Database Name:</label>
|
<label class="control-label">Database Name:</label>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<div class="input-group-addon">{{ $server->uuidShort }}_</div>
|
<div class="input-group-addon">s{{ $server->id }}_</div>
|
||||||
<input type="text" name="database" value="{{ old('database') }}" class="form-control">
|
<input type="text" name="database" value="{{ old('database') }}" class="form-control">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in a new issue