From 5d98fc327b24df8534b9beb7a5c7da88b0eb63b7 Mon Sep 17 00:00:00 2001 From: tenten8401 Date: Mon, 20 Nov 2017 09:47:49 -0500 Subject: [PATCH 01/11] Workaround for improper boolean handling Since laravel only takes 1, 0, true, false, "1", and "0" instead of allowing "true" and "false". --- database/seeds/eggs/rust/egg-rust.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/seeds/eggs/rust/egg-rust.json b/database/seeds/eggs/rust/egg-rust.json index c3d4901f..074b1442 100644 --- a/database/seeds/eggs/rust/egg-rust.json +++ b/database/seeds/eggs/rust/egg-rust.json @@ -36,7 +36,7 @@ "name": "OxideMod", "description": "Set whether you want the server to use and auto update OxideMod or not. Valid options are \"1\" for true and \"0\" for false.", "env_variable": "OXIDE", - "default_value": "false", + "default_value": "0", "user_viewable": 1, "user_editable": 1, "rules": "required|boolean" From 674628cc011fc955090a9d33bbef6f0a69fd3406 Mon Sep 17 00:00:00 2001 From: Lance Pioch Date: Wed, 22 Nov 2017 14:16:11 -0500 Subject: [PATCH 02/11] Lengthen search box --- resources/themes/pterodactyl/admin/nodes/index.blade.php | 2 +- resources/themes/pterodactyl/admin/packs/index.blade.php | 2 +- resources/themes/pterodactyl/admin/servers/index.blade.php | 2 +- resources/themes/pterodactyl/admin/users/index.blade.php | 2 +- resources/themes/pterodactyl/base/index.blade.php | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/resources/themes/pterodactyl/admin/nodes/index.blade.php b/resources/themes/pterodactyl/admin/nodes/index.blade.php index 25459e46..f6250dda 100644 --- a/resources/themes/pterodactyl/admin/nodes/index.blade.php +++ b/resources/themes/pterodactyl/admin/nodes/index.blade.php @@ -31,7 +31,7 @@
- +
diff --git a/resources/themes/pterodactyl/admin/packs/index.blade.php b/resources/themes/pterodactyl/admin/packs/index.blade.php index 270bea96..ba4f3fd6 100644 --- a/resources/themes/pterodactyl/admin/packs/index.blade.php +++ b/resources/themes/pterodactyl/admin/packs/index.blade.php @@ -26,7 +26,7 @@
- +
diff --git a/resources/themes/pterodactyl/admin/servers/index.blade.php b/resources/themes/pterodactyl/admin/servers/index.blade.php index ca21e582..8d5b9e30 100644 --- a/resources/themes/pterodactyl/admin/servers/index.blade.php +++ b/resources/themes/pterodactyl/admin/servers/index.blade.php @@ -26,7 +26,7 @@
- +
diff --git a/resources/themes/pterodactyl/admin/users/index.blade.php b/resources/themes/pterodactyl/admin/users/index.blade.php index 0c4289f3..89540f0e 100644 --- a/resources/themes/pterodactyl/admin/users/index.blade.php +++ b/resources/themes/pterodactyl/admin/users/index.blade.php @@ -26,7 +26,7 @@
- +
diff --git a/resources/themes/pterodactyl/base/index.blade.php b/resources/themes/pterodactyl/base/index.blade.php index 3b5cd62f..67522460 100644 --- a/resources/themes/pterodactyl/base/index.blade.php +++ b/resources/themes/pterodactyl/base/index.blade.php @@ -26,7 +26,7 @@
- +
From d4758efef8a50c362bd5ab4c54de1254d08c24d4 Mon Sep 17 00:00:00 2001 From: Dane Everitt Date: Thu, 23 Nov 2017 15:08:35 -0600 Subject: [PATCH 03/11] 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 e90d4b5f..5a2dd4db 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 b0d21c7c..75e72ef5 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 fbfa117f..f3df6296 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 a6385abc..ec092eee 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', From 166c43c2599dadb38865b3318a0586f8e84a436b Mon Sep 17 00:00:00 2001 From: Dane Everitt Date: Thu, 23 Nov 2017 21:08:43 +0000 Subject: [PATCH 04/11] Apply fixes from StyleCI [ci skip] [skip ci] --- app/Console/Commands/Environment/AppSettingsCommand.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Console/Commands/Environment/AppSettingsCommand.php b/app/Console/Commands/Environment/AppSettingsCommand.php index f3df6296..8f27d1ad 100644 --- a/app/Console/Commands/Environment/AppSettingsCommand.php +++ b/app/Console/Commands/Environment/AppSettingsCommand.php @@ -21,7 +21,7 @@ class AppSettingsCommand extends Command const ALLOWED_CACHE_DRIVERS = [ 'redis' => 'Redis (recommended)', - 'memcached' => 'Memcached' + 'memcached' => 'Memcached', ]; const ALLOWED_SESSION_DRIVERS = [ From 34db4102b91a4abe506977cc10cfc644af6e1f5f Mon Sep 17 00:00:00 2001 From: Dane Everitt Date: Sat, 25 Nov 2017 11:59:11 -0600 Subject: [PATCH 05/11] Enable opcache on travis to speed up build time --- .travis.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index b0590806..277c25df 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,9 +13,10 @@ services: before_install: - mysql -e 'CREATE DATABASE IF NOT EXISTS travis;' before_script: + - echo 'opcache.enable_cli=1' >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini - cp .env.travis .env - - composer install --no-interaction --prefer-dist --no-suggest --verbose - - php artisan migrate --seed -v + - composer install --no-interaction --prefer-dist --no-suggest + - php artisan migrate --seed script: - vendor/bin/phpunit --coverage-clover coverage.xml notifications: From 0bb44a49722d4547d36caa6c672af322ca374b87 Mon Sep 17 00:00:00 2001 From: Dane Everitt Date: Sat, 25 Nov 2017 12:27:08 -0600 Subject: [PATCH 06/11] Fix server startup dropdown for egg being incorrect, fixes #778 --- CHANGELOG.md | 1 + app/Http/Controllers/Admin/ServersController.php | 7 ++++--- resources/lang/en/admin/server.php | 2 +- .../pterodactyl/admin/servers/view/startup.blade.php | 12 ++++++------ 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 75e72ef5..29257893 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ 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. +* `[beta.2]` — Fixes a bug causing the dropdown menu for a server's egg to display the wrong selected value. ## v0.7.0-beta.2 (Derelict Dermodactylus) ### Fixed diff --git a/app/Http/Controllers/Admin/ServersController.php b/app/Http/Controllers/Admin/ServersController.php index 0bf3610f..1cd63a20 100644 --- a/app/Http/Controllers/Admin/ServersController.php +++ b/app/Http/Controllers/Admin/ServersController.php @@ -319,14 +319,14 @@ class ServersController extends Controller /** * Display startup configuration page for a server. * - * @param int $server + * @param \Pterodactyl\Models\Server $server * @return \Illuminate\View\View * * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException */ - public function viewStartup($server) + public function viewStartup(Server $server) { - $parameters = $this->repository->getVariablesWithValues($server, true); + $parameters = $this->repository->getVariablesWithValues($server->id, true); if (! $parameters->server->installed) { abort(404); } @@ -334,6 +334,7 @@ class ServersController extends Controller $nests = $this->nestRepository->getWithEggs(); Javascript::put([ + 'server' => $server, 'nests' => $nests->map(function ($item) { return array_merge($item->toArray(), [ 'eggs' => $item->eggs->keyBy('id')->toArray(), diff --git a/resources/lang/en/admin/server.php b/resources/lang/en/admin/server.php index e93459a9..e0ccdba7 100644 --- a/resources/lang/en/admin/server.php +++ b/resources/lang/en/admin/server.php @@ -16,7 +16,7 @@ return [ 'default_allocation_not_found' => 'The requested default allocation was not found in this server\'s allocations.', ], 'alerts' => [ - 'startup_changed' => 'The startup configuration for this server has been updated. If this server\'s service or option was changed a reinstall will be occuring now.', + 'startup_changed' => 'The startup configuration for this server has been updated. If this server\'s nest or egg was changed a reinstall will be occuring now.', 'server_deleted' => 'Server has successfully been deleted from the system.', 'server_created' => 'Server was successfully created on the panel. Please allow the daemon a few minutes to completely install this server.', 'build_updated' => 'The build details for this server have been updated. Some changes may require a restart to take effect.', diff --git a/resources/themes/pterodactyl/admin/servers/view/startup.blade.php b/resources/themes/pterodactyl/admin/servers/view/startup.blade.php index 15bee661..ab2ac46f 100644 --- a/resources/themes/pterodactyl/admin/servers/view/startup.blade.php +++ b/resources/themes/pterodactyl/admin/servers/view/startup.blade.php @@ -148,7 +148,7 @@ text: item.name, }; }), - }).change(); + }).val(Pterodactyl.server.egg_id).change(); }); $('#pEggId').on('change', function (event) { @@ -157,8 +157,8 @@ $('#setDefaultImage').html(_.get(objectChain, 'docker_image', 'undefined')); $('#pDockerImage').val(_.get(objectChain, 'docker_image', 'undefined')); - if (objectChain.id === parseInt('{{ $server->egg_id }}')) { - $('#pDockerImage').val('{{ $server->image }}'); + if (objectChain.id === parseInt(Pterodactyl.server.egg_id)) { + $('#pDockerImage').val(Pterodactyl.server.image); } if (!_.get(objectChain, 'startup', false)) { @@ -178,9 +178,9 @@ ), }); - @if(! is_null($server->pack_id)) - $('#pPackId').val({{ $server->pack_id }}); - @endif + if (Pterodactyl.server.pack_id !== null) { + $('#pPackId').val(Pterodactyl.server.pack_id); + } $('#appendVariablesTo').html(''); $.each(_.get(objectChain, 'variables', []), function (i, item) { From 20c1c7411676bd121b2148b0a250672c5f4ec62c Mon Sep 17 00:00:00 2001 From: Dane Everitt Date: Sat, 25 Nov 2017 13:15:46 -0600 Subject: [PATCH 07/11] Fix issues with validation in admin CP for server variables, closes #780 --- CHANGELOG.md | 1 + app/Exceptions/DisplayValidationException.php | 2 +- .../Servers/StartupModificationService.php | 3 +- .../Servers/VariableValidatorService.php | 36 +++++----- resources/lang/en/validation.php | 22 ++----- .../Servers/VariableValidatorServiceTest.php | 66 ++++--------------- 6 files changed, 42 insertions(+), 88 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 29257893..8c70ce48 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ This project follows [Semantic Versioning](http://semver.org) guidelines. ### 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. * `[beta.2]` — Fixes a bug causing the dropdown menu for a server's egg to display the wrong selected value. +* `[beta.2]` — Fixes a bug that would throw a red page of death when submitting an invalid egg variable value for a server in the Admin CP. ## v0.7.0-beta.2 (Derelict Dermodactylus) ### Fixed diff --git a/app/Exceptions/DisplayValidationException.php b/app/Exceptions/DisplayValidationException.php index 3ffae964..38ae082f 100644 --- a/app/Exceptions/DisplayValidationException.php +++ b/app/Exceptions/DisplayValidationException.php @@ -9,6 +9,6 @@ namespace Pterodactyl\Exceptions; -class DisplayValidationException extends PterodactylException +class DisplayValidationException extends DisplayException { } diff --git a/app/Services/Servers/StartupModificationService.php b/app/Services/Servers/StartupModificationService.php index 969d4310..784b60a0 100644 --- a/app/Services/Servers/StartupModificationService.php +++ b/app/Services/Servers/StartupModificationService.php @@ -78,9 +78,10 @@ class StartupModificationService * @param \Pterodactyl\Models\Server $server * @param array $data * - * @throws \Pterodactyl\Exceptions\DisplayException + * @throws \Illuminate\Validation\ValidationException * @throws \Pterodactyl\Exceptions\Model\DataValidationException * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException + * @throws \Pterodactyl\Exceptions\Http\Connection\DaemonConnectionException */ public function handle(Server $server, array $data) { diff --git a/app/Services/Servers/VariableValidatorService.php b/app/Services/Servers/VariableValidatorService.php index b4f722c7..31ca3728 100644 --- a/app/Services/Servers/VariableValidatorService.php +++ b/app/Services/Servers/VariableValidatorService.php @@ -11,8 +11,8 @@ namespace Pterodactyl\Services\Servers; use Pterodactyl\Models\User; use Illuminate\Support\Collection; +use Illuminate\Validation\ValidationException; use Pterodactyl\Traits\Services\HasUserLevels; -use Pterodactyl\Exceptions\DisplayValidationException; use Pterodactyl\Contracts\Repository\ServerRepositoryInterface; use Illuminate\Contracts\Validation\Factory as ValidationFactory; use Pterodactyl\Contracts\Repository\EggVariableRepositoryInterface; @@ -25,22 +25,22 @@ class VariableValidatorService /** * @var \Pterodactyl\Contracts\Repository\EggVariableRepositoryInterface */ - protected $optionVariableRepository; + private $optionVariableRepository; /** * @var \Pterodactyl\Contracts\Repository\ServerRepositoryInterface */ - protected $serverRepository; + private $serverRepository; /** * @var \Pterodactyl\Contracts\Repository\ServerVariableRepositoryInterface */ - protected $serverVariableRepository; + private $serverVariableRepository; /** * @var \Illuminate\Contracts\Validation\Factory */ - protected $validator; + private $validator; /** * VariableValidatorService constructor. @@ -68,32 +68,32 @@ class VariableValidatorService * @param int $egg * @param array $fields * @return \Illuminate\Support\Collection + * @throws \Illuminate\Validation\ValidationException */ public function handle(int $egg, array $fields = []): Collection { $variables = $this->optionVariableRepository->findWhere([['egg_id', '=', $egg]]); + $messages = $this->validator->make([], []); - return $variables->map(function ($item) use ($fields) { + $response = $variables->map(function ($item) use ($fields, $messages) { // Skip doing anything if user is not an admin and // variable is not user viewable or editable. if (! $this->isUserLevel(User::USER_LEVEL_ADMIN) && (! $item->user_editable || ! $item->user_viewable)) { return false; } - $validator = $this->validator->make([ + $v = $this->validator->make([ 'variable_value' => array_get($fields, $item->env_variable), ], [ 'variable_value' => $item->rules, + ], [], [ + 'variable_value' => trans('validation.internal.variable_value', ['env' => $item->name]), ]); - if ($validator->fails()) { - throw new DisplayValidationException(json_encode( - collect([ - 'notice' => [ - trans('admin/server.exceptions.bad_variable', ['name' => $item->name]), - ], - ])->merge($validator->errors()->toArray()) - )); + if ($v->fails()) { + foreach ($v->getMessageBag()->all() as $message) { + $messages->getMessageBag()->add($item->env_variable, $message); + } } return (object) [ @@ -104,5 +104,11 @@ class VariableValidatorService })->filter(function ($item) { return is_object($item); }); + + if (! empty($messages->getMessageBag()->all())) { + throw new ValidationException($messages); + } + + return $response; } } diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php index d6b78467..201880ec 100644 --- a/resources/lang/en/validation.php +++ b/resources/lang/en/validation.php @@ -85,23 +85,6 @@ return [ 'uploaded' => 'The :attribute failed to upload.', 'url' => 'The :attribute format is invalid.', - /* - |-------------------------------------------------------------------------- - | Custom Validation Language Lines - |-------------------------------------------------------------------------- - | - | Here you may specify custom validation messages for attributes using the - | convention "attribute.rule" to name the lines. This makes it quick to - | specify a specific custom language line for a given attribute rule. - | - */ - - 'custom' => [ - 'attribute-name' => [ - 'rule-name' => 'custom-message', - ], - ], - /* |-------------------------------------------------------------------------- | Custom Validation Attributes @@ -114,4 +97,9 @@ return [ */ 'attributes' => [], + + // Internal validation logic for Pterodactyl + 'internal' => [ + 'variable_value' => ':env variable', + ], ]; diff --git a/tests/Unit/Services/Servers/VariableValidatorServiceTest.php b/tests/Unit/Services/Servers/VariableValidatorServiceTest.php index b949b3ae..5f5294e5 100644 --- a/tests/Unit/Services/Servers/VariableValidatorServiceTest.php +++ b/tests/Unit/Services/Servers/VariableValidatorServiceTest.php @@ -1,11 +1,4 @@ . - * - * This software is licensed under the terms of the MIT license. - * https://opensource.org/licenses/MIT - */ namespace Tests\Unit\Services\Servers; @@ -15,8 +8,7 @@ use Pterodactyl\Models\User; use Illuminate\Support\Collection; use Pterodactyl\Models\EggVariable; use Illuminate\Contracts\Validation\Factory; -use Pterodactyl\Exceptions\PterodactylException; -use Pterodactyl\Exceptions\DisplayValidationException; +use Illuminate\Validation\ValidationException; use Pterodactyl\Services\Servers\VariableValidatorService; use Pterodactyl\Contracts\Repository\ServerRepositoryInterface; use Pterodactyl\Contracts\Repository\EggVariableRepositoryInterface; @@ -27,22 +19,17 @@ class VariableValidatorServiceTest extends TestCase /** * @var \Pterodactyl\Contracts\Repository\EggVariableRepositoryInterface|\Mockery\Mock */ - protected $optionVariableRepository; + private $optionVariableRepository; /** * @var \Pterodactyl\Contracts\Repository\ServerRepositoryInterface|\Mockery\Mock */ - protected $serverRepository; + private $serverRepository; /** * @var \Pterodactyl\Contracts\Repository\ServerVariableRepositoryInterface|\Mockery\Mock */ - protected $serverVariableRepository; - - /** - * @var \Illuminate\Contracts\Validation\Factory|\Mockery\Mock - */ - protected $validator; + private $serverVariableRepository; /** * Setup tests. @@ -54,7 +41,6 @@ class VariableValidatorServiceTest extends TestCase $this->optionVariableRepository = m::mock(EggVariableRepositoryInterface::class); $this->serverRepository = m::mock(ServerRepositoryInterface::class); $this->serverVariableRepository = m::mock(ServerVariableRepositoryInterface::class); - $this->validator = m::mock(Factory::class); } /** @@ -77,13 +63,6 @@ class VariableValidatorServiceTest extends TestCase $variables = $this->getVariableCollection(); $this->optionVariableRepository->shouldReceive('findWhere')->with([['egg_id', '=', 1]])->andReturn($variables); - $this->validator->shouldReceive('make')->with([ - 'variable_value' => 'Test_SomeValue_0', - ], [ - 'variable_value' => $variables[0]->rules, - ])->once()->andReturnSelf(); - $this->validator->shouldReceive('fails')->withNoArgs()->once()->andReturn(false); - $response = $this->getService()->handle(1, [ $variables[0]->env_variable => 'Test_SomeValue_0', $variables[1]->env_variable => 'Test_SomeValue_1', @@ -112,15 +91,6 @@ class VariableValidatorServiceTest extends TestCase $variables = $this->getVariableCollection(); $this->optionVariableRepository->shouldReceive('findWhere')->with([['egg_id', '=', 1]])->andReturn($variables); - foreach ($variables as $key => $variable) { - $this->validator->shouldReceive('make')->with([ - 'variable_value' => 'Test_SomeValue_' . $key, - ], [ - 'variable_value' => $variables[$key]->rules, - ])->once()->andReturnSelf(); - $this->validator->shouldReceive('fails')->withNoArgs()->once()->andReturn(false); - } - $service = $this->getService(); $service->setUserLevel(User::USER_LEVEL_ADMIN); $response = $service->handle(1, [ @@ -152,28 +122,16 @@ class VariableValidatorServiceTest extends TestCase $variables = $this->getVariableCollection(); $this->optionVariableRepository->shouldReceive('findWhere')->with([['egg_id', '=', 1]])->andReturn($variables); - $this->validator->shouldReceive('make')->with([ - 'variable_value' => null, - ], [ - 'variable_value' => $variables[0]->rules, - ])->once()->andReturnSelf(); - $this->validator->shouldReceive('fails')->withNoArgs()->once()->andReturn(true); - - $this->validator->shouldReceive('errors')->withNoArgs()->once()->andReturnSelf(); - $this->validator->shouldReceive('toArray')->withNoArgs()->once()->andReturn([]); - try { $this->getService()->handle(1, [$variables[0]->env_variable => null]); - } catch (PterodactylException $exception) { - $this->assertInstanceOf(DisplayValidationException::class, $exception); + } catch (ValidationException $exception) { + $messages = $exception->validator->getMessageBag()->all(); - $decoded = json_decode($exception->getMessage()); - $this->assertEquals(0, json_last_error(), 'Assert that response is decodable JSON.'); - $this->assertObjectHasAttribute('notice', $decoded); - $this->assertEquals( - trans('admin/server.exceptions.bad_variable', ['name' => $variables[0]->name]), - $decoded->notice[0] - ); + $this->assertNotEmpty($messages); + $this->assertSame(1, count($messages)); + $this->assertSame(trans('validation.required', [ + 'attribute' => trans('validation.internal.variable_value', ['env' => $variables[0]->name]), + ]), $messages[0]); } } @@ -205,7 +163,7 @@ class VariableValidatorServiceTest extends TestCase $this->optionVariableRepository, $this->serverRepository, $this->serverVariableRepository, - $this->validator + $this->app->make(Factory::class) ); } } From 9ee503b3c13601e3fcc152f86612241737ce0b88 Mon Sep 17 00:00:00 2001 From: Dane Everitt Date: Sat, 25 Nov 2017 13:17:31 -0600 Subject: [PATCH 08/11] Fix error message formatting to match new style --- resources/themes/pterodactyl/layouts/admin.blade.php | 4 ++-- resources/themes/pterodactyl/layouts/master.blade.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/themes/pterodactyl/layouts/admin.blade.php b/resources/themes/pterodactyl/layouts/admin.blade.php index 6fe6552a..0c2108ff 100644 --- a/resources/themes/pterodactyl/layouts/admin.blade.php +++ b/resources/themes/pterodactyl/layouts/admin.blade.php @@ -133,7 +133,7 @@
@if (count($errors) > 0) -
+
@lang('base.validation_error')

    @foreach ($errors->all() as $error) @@ -144,7 +144,7 @@ @endif @foreach (Alert::getMessages() as $type => $messages) @foreach ($messages as $message) -