From d4758efef8a50c362bd5ab4c54de1254d08c24d4 Mon Sep 17 00:00:00 2001 From: Dane Everitt Date: Thu, 23 Nov 2017 15:08:35 -0600 Subject: [PATCH] Implement fix for console spam when using invalid environment variable values --- .env.example | 12 ++-- CHANGELOG.md | 4 ++ .../Environment/AppSettingsCommand.php | 60 ++++++++++++------- resources/lang/en/command/messages.php | 1 + 4 files changed, 51 insertions(+), 26 deletions(-) diff --git a/.env.example b/.env.example index e90d4b5f6..5a2dd4dbf 100644 --- a/.env.example +++ b/.env.example @@ -2,10 +2,10 @@ APP_ENV=production APP_DEBUG=false APP_KEY=SomeRandomString3232RandomString APP_THEME=pterodactyl -APP_TIMEZONE=UTC +APP_TIMEZONE=America/New_York APP_CLEAR_TASKLOG=720 APP_DELETE_MINUTES=10 -APP_URL=http://yoursite.com/ +APP_URL= DB_HOST=127.0.0.1 DB_PORT=3306 @@ -13,8 +13,8 @@ DB_DATABASE=panel DB_USERNAME=pterodactyl DB_PASSWORD= -CACHE_DRIVER=redis -SESSION_DRIVER=database +CACHE_DRIVER= +SESSION_DRIVER= HASHIDS_SALT= HASHIDS_LENGTH=8 @@ -25,9 +25,9 @@ MAIL_PORT=2525 MAIL_USERNAME= MAIL_PASSWORD= MAIL_ENCRYPTION=tls -MAIL_FROM=you@example.com +MAIL_FROM=no-reply@example.com -QUEUE_DRIVER=database +QUEUE_DRIVER= QUEUE_HIGH=high QUEUE_STANDARD=standard QUEUE_LOW=low diff --git a/CHANGELOG.md b/CHANGELOG.md index b0d21c7c5..75e72ef5b 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.0-beta.3 (Derelict Dermodactylus) +### Fixed +* `[beta.2]` — Fixes a bug that would cause an endless exception message stream in the console when attemping to setup environment settings in certain instances. + ## v0.7.0-beta.2 (Derelict Dermodactylus) ### Fixed * `[beta.1]` — Fixes a CORS header issue due to a wrong API endpoint being provided in the administrative node listing. diff --git a/app/Console/Commands/Environment/AppSettingsCommand.php b/app/Console/Commands/Environment/AppSettingsCommand.php index fbfa117f7..f3df6296a 100644 --- a/app/Console/Commands/Environment/AppSettingsCommand.php +++ b/app/Console/Commands/Environment/AppSettingsCommand.php @@ -9,6 +9,7 @@ namespace Pterodactyl\Console\Commands\Environment; +use DateTimeZone; use Illuminate\Console\Command; use Illuminate\Contracts\Console\Kernel; use Pterodactyl\Traits\Commands\EnvironmentWriterTrait; @@ -18,6 +19,25 @@ class AppSettingsCommand extends Command { use EnvironmentWriterTrait; + const ALLOWED_CACHE_DRIVERS = [ + 'redis' => 'Redis (recommended)', + 'memcached' => 'Memcached' + ]; + + const ALLOWED_SESSION_DRIVERS = [ + 'redis' => 'Redis (recommended)', + 'memcached' => 'Memcached', + 'database' => 'MySQL Database', + 'file' => 'Filesystem', + 'cookie' => 'Cookie', + ]; + + const ALLOWED_QUEUE_DRIVERS = [ + 'redis' => 'Redis (recommended)', + 'database' => 'MySQL Database', + 'sync' => 'Sync', + ]; + /** * @var \Illuminate\Contracts\Console\Kernel */ @@ -37,11 +57,13 @@ class AppSettingsCommand extends Command * @var string */ protected $signature = 'p:environment:setup + {--new-salt : Wether or not to generate a new salt for Hashids.} {--author= : The email that services created on this instance should be linked to.} {--url= : The URL that this Panel is running on.} {--timezone= : The timezone to use for Panel times.} {--cache= : The cache driver backend to use.} {--session= : The session driver backend to use.} + {--queue= : The queue driver backend to use.} {--redis-host= : Redis host to use for connections.} {--redis-pass= : Password used to connect to redis.} {--redis-port= : Port to connect to redis over.}'; @@ -72,7 +94,7 @@ class AppSettingsCommand extends Command */ public function handle() { - if (empty($this->config->get('hashids.salt')) || $this->option('--new-salt')) { + if (empty($this->config->get('hashids.salt')) || $this->option('new-salt')) { $this->variables['HASHIDS_SALT'] = str_random(20); } @@ -87,33 +109,31 @@ class AppSettingsCommand extends Command ); $this->output->comment(trans('command/messages.environment.app.timezone_help')); - $this->variables['APP_TIMEZONE'] = $this->option('timezone') ?? $this->ask( - trans('command/messages.environment.app.timezone'), $this->config->get('app.timezone') + $this->variables['APP_TIMEZONE'] = $this->option('timezone') ?? $this->anticipate( + trans('command/messages.environment.app.timezone'), + DateTimeZone::listIdentifiers(DateTimeZone::ALL), + $this->config->get('app.timezone') ); + $selected = $this->config->get('cache.default', 'redis'); $this->variables['CACHE_DRIVER'] = $this->option('cache') ?? $this->choice( - trans('command/messages.environment.app.cache_driver'), [ - 'redis' => 'Redis (recommended)', - 'memcached' => 'Memcached', - ], $this->config->get('cache.default', 'redis') + trans('command/messages.environment.app.cache_driver'), + self::ALLOWED_CACHE_DRIVERS, + array_key_exists($selected, self::ALLOWED_CACHE_DRIVERS) ? $selected : null ); + $selected = $this->config->get('session.driver', 'redis'); $this->variables['SESSION_DRIVER'] = $this->option('session') ?? $this->choice( - trans('command/messages.environment.app.session_driver'), [ - 'redis' => 'Redis (recommended)', - 'memcached' => 'Memcached', - 'database' => 'MySQL Database', - 'file' => 'Filesystem', - 'cookie' => 'Cookie', - ], $this->config->get('session.driver', 'redis') + trans('command/messages.environment.app.session_driver'), + self::ALLOWED_SESSION_DRIVERS, + array_key_exists($selected, self::ALLOWED_SESSION_DRIVERS) ? $selected : null ); - $this->variables['QUEUE_DRIVER'] = $this->option('session') ?? $this->choice( - trans('command/messages.environment.app.session_driver'), [ - 'redis' => 'Redis (recommended)', - 'database' => 'MySQL Database', - 'sync' => 'Sync', - ], $this->config->get('queue.driver', 'redis') + $selected = $this->config->get('queue.default', 'redis'); + $this->variables['QUEUE_DRIVER'] = $this->option('queue') ?? $this->choice( + trans('command/messages.environment.app.queue_driver'), + self::ALLOWED_QUEUE_DRIVERS, + array_key_exists($selected, self::ALLOWED_QUEUE_DRIVERS) ? $selected : null ); $this->checkForRedis(); diff --git a/resources/lang/en/command/messages.php b/resources/lang/en/command/messages.php index a6385abc4..ec092eee7 100644 --- a/resources/lang/en/command/messages.php +++ b/resources/lang/en/command/messages.php @@ -82,6 +82,7 @@ return [ 'timezone' => 'Application Timezone', 'cache_driver' => 'Cache Driver', 'session_driver' => 'Session Driver', + 'queue_driver' => 'Queue Driver', 'using_redis' => 'You\'ve selected the Redis driver for one or more options, please provide valid connection information below. In most cases you can use the defaults provided unless you have modified your setup.', 'redis_host' => 'Redis Host', 'redis_password' => 'Redis Password',