Skip to content

Commit 1ad715f

Browse files
committed
Improve database management for servers, fixes pterodactyl#181
1 parent 723b608 commit 1ad715f

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

app/Repositories/DatabaseRepository.php

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,12 @@ public function create($server, $options)
5656
}
5757

5858
DB::beginTransaction();
59-
6059
try {
6160
$db = new Models\Database;
6261
$db->fill([
6362
'server_id' => $server->id,
6463
'db_server' => $options['db_server'],
65-
'database' => $server->uuidShort . '_' . $options['database'],
64+
'database' => "s{$server->id}_{$options['database']}",
6665
'username' => $server->uuidShort . '_' . str_random(7),
6766
'remote' => $options['remote'],
6867
'password' => Crypt::encrypt(str_random(20))
@@ -90,16 +89,29 @@ public function create($server, $options)
9089

9190
$capsule->setAsGlobal();
9291

93-
Capsule::statement('CREATE DATABASE ' . $db->database);
94-
Capsule::statement('CREATE USER \'' . $db->username . '\'@\'' . $db->remote . '\' IDENTIFIED BY \'' . Crypt::decrypt($db->password) . '\'');
95-
Capsule::statement('GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX ON ' . $db->database . '.* TO \'' . $db->username . '\'@\'' . $db->remote . '\'');
96-
Capsule::statement('FLUSH PRIVILEGES');
92+
} catch (\Exception $ex) {
93+
DB::rollBack();
94+
throw new DisplayException('There was an error while connecting to the Database Host Server. Please check the error logs.', $ex);
95+
}
9796

97+
try {
98+
Capsule::statement('CREATE DATABASE `' . $db->database . '`');
99+
Capsule::statement('CREATE USER `' . $db->username . '`@`' . $db->remote . '` IDENTIFIED BY \'' . Crypt::decrypt($db->password) . '\'');
100+
Capsule::statement('GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX ON `' . $db->database . '`.* TO `' . $db->username . '`@`' . $db->remote . '`');
101+
Capsule::statement('FLUSH PRIVILEGES');
98102
DB::commit();
99-
return true;
100103
} catch (\Exception $ex) {
101-
DB::rollback();
102-
throw $ex;
104+
try {
105+
Capsule::statement('DROP DATABASE `' . $db->database . '`');
106+
Capsule::statement('DROP USER `' . $db->username . '`@`' . $db->remote . '`');
107+
} catch (\Exception $exi) {
108+
// ignore it, if it fails its probably
109+
// because we failed to ever make the DB
110+
// or the user on the system.
111+
} finally {
112+
DB::rollBack();
113+
throw $ex;
114+
}
103115
}
104116
}
105117

@@ -138,7 +150,7 @@ public function modifyPassword($database, $password)
138150

139151
$capsule->setAsGlobal();
140152
Capsule::statement(sprintf(
141-
'SET PASSWORD FOR \'%s\'@\'%s\' = PASSWORD(\'%s\')',
153+
'SET PASSWORD FOR `%s`@`%s` = PASSWORD(\'%s\')',
142154
$db->username,
143155
$db->remote,
144156
$password
@@ -182,8 +194,8 @@ public function drop($database)
182194

183195
$capsule->setAsGlobal();
184196

185-
Capsule::statement('DROP USER \'' . $db->username . '\'@\'' . $db->remote . '\'');
186-
Capsule::statement('DROP DATABASE ' . $db->database);
197+
Capsule::statement('DROP USER `' . $db->username . '`@`' . $db->remote . '`');
198+
Capsule::statement('DROP DATABASE `' . $db->database . '`');
187199

188200
$db->delete();
189201

resources/views/admin/servers/view.blade.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@
373373
<div class="form-group col-md-6">
374374
<label class="control-label">Database Name:</label>
375375
<div class="input-group">
376-
<div class="input-group-addon">{{ $server->uuidShort }}_</div>
376+
<div class="input-group-addon">s{{ $server->id }}_</div>
377377
<input type="text" name="database" value="{{ old('database') }}" class="form-control">
378378
</div>
379379
</div>

0 commit comments

Comments
 (0)