Improve database management for servers, fixes #181

This commit is contained in:
Dane Everitt 2016-11-26 17:34:14 -05:00
parent 723b608e0c
commit 1ad715f1a3
No known key found for this signature in database
GPG key ID: EEA66103B3D71F53
2 changed files with 27 additions and 15 deletions

View file

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

View file

@ -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>