diff --git a/CHANGELOG.md b/CHANGELOG.md index 33749dd55..37a638853 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ This file is a running track of new features and fixes to each version of the pa This project follows [Semantic Versioning](http://semver.org) guidelines. +## v0.7.17 (Derelict Dermodactylus) +### Fixed +* Fixes database passwords not being generated with the proper requirements for some MySQL setups. + ## v0.7.16 (Derelict Dermodactylus) ### Fixed * Fixed the /api/application/servers endpoint erroring when including subusers or egg diff --git a/app/Helpers/Utilities.php b/app/Helpers/Utilities.php new file mode 100644 index 000000000..5de685fe9 --- /dev/null +++ b/app/Helpers/Utilities.php @@ -0,0 +1,35 @@ +encrypter->encrypt(str_random(24)); + $data['password'] = $this->encrypter->encrypt( + Utilities::randomStringWithSpecialCharacters(24) + ); $this->database->beginTransaction(); try { diff --git a/app/Services/Databases/DatabasePasswordService.php b/app/Services/Databases/DatabasePasswordService.php index ed60bad4a..ad5882c49 100644 --- a/app/Services/Databases/DatabasePasswordService.php +++ b/app/Services/Databases/DatabasePasswordService.php @@ -2,9 +2,8 @@ namespace Pterodactyl\Services\Databases; -use Exception; use Pterodactyl\Models\Database; -use Illuminate\Support\Facades\Log; +use Pterodactyl\Helpers\Utilities; use Illuminate\Database\ConnectionInterface; use Illuminate\Contracts\Encryption\Encrypter; use Pterodactyl\Extensions\DynamicDatabaseConnection; @@ -62,19 +61,7 @@ class DatabasePasswordService */ public function handle(Database $database): string { - $password = str_random(24); - // Given a random string of characters, randomly loop through the characters and replace some - // with special characters to avoid issues with MySQL password requirements on some servers. - try { - for ($i = 0; $i < random_int(2, 6); $i++) { - $character = ['!', '@', '=', '.', '+', '^'][random_int(0, 5)]; - - $password = substr_replace($password, $character, random_int(0, 23), 1); - } - } catch (Exception $exception) { - // Just log the error and hope for the best at this point. - Log::error($exception); - } + $password = Utilities::randomStringWithSpecialCharacters(24); $this->connection->transaction(function () use ($database, $password) { $this->dynamic->set('dynamic', $database->database_host_id);