Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can't Use Pipe Characters in Variable Regex Validation Rules #1960

Closed
Mheetu opened this issue Apr 21, 2020 · 4 comments
Closed

Can't Use Pipe Characters in Variable Regex Validation Rules #1960

Mheetu opened this issue Apr 21, 2020 · 4 comments
Labels
bug Something that's not working as it's intended to be.

Comments

@Mheetu
Copy link

Mheetu commented Apr 21, 2020

Background (please complete the following information):

  • Panel or Daemon: Panel
  • Version of Panel/Daemon: 1.0

Describe the bug
Due to a limitation in Laravel's validation system, Pterodactyl is unable to have pipe characters in regex and not_regex variable validation rules. The issue is that Laravel uses the pipe character to separate each rule when the rules are presented in a string format. When you combine that with a regular expression that also contains the pipe character, Pterodactyl throws an HTTP 500 error.

The solution is to use an array format instead. As mentioned in the Laravel documentation...
image

To Reproduce
Steps to reproduce the behavior:

  1. Go to an egg, or create a new one.
  2. Attempt to create or update a variable with the following validation rule: required|regex:/apples|bananas/i
  3. You'll see an HTTP 500 error

Expected behavior
Persisting the rules without error and being able to validate on regular expressions containing the pipe symbol.

@DaneEveritt DaneEveritt added 1.0.0-beta bug Something that's not working as it's intended to be. labels Apr 22, 2020
@DaneEveritt
Copy link
Member

This was a little tricky since we only support strings for validation rules (and I don't want to spend time trying to change that right now). For now, using ;; between rules will cause the code to split the rules into an array, so required;;string;;min:6 becomes [required, string, min:6]. This resolves the issues with using pipes in the regex rules.

@parkervcp
Copy link
Member

parkervcp commented Jun 29, 2020

This is still broken even using ;; between

I am trying to use the following config.
required;;string;;regex:/^(True|False)$/

[2020-06-29 14:28:48] production.ERROR: BadMethodCallException: Method Illuminate\Validation\Validator::validateRequired;;string;;regex does not exist. in /app/vendor/laravel/framework/src/Illuminate/Validation/Validator.php:1292
Stack trace:
#0 /app/vendor/laravel/framework/src/Illuminate/Validation/Validator.php(457): Illuminate\Validation\Validator->__call('validateRequire...', Array)
#1 /app/vendor/laravel/framework/src/Illuminate/Validation/Validator.php(300): Illuminate\Validation\Validator->validateAttribute('__TEST', 'Required;;strin...')
#2 /app/vendor/laravel/framework/src/Illuminate/Validation/Validator.php(331): Illuminate\Validation\Validator->passes()
#3 /app/app/Traits/Services/ValidatesValidationRules.php(28): Illuminate\Validation\Validator->fails()
#4 /app/app/Services/Eggs/Variables/VariableUpdateService.php(84): Pterodactyl\Services\Eggs\Variables\VariableUpdateService->validateRules('required;;strin...')
#5 /app/app/Http/Controllers/Admin/Nests/EggVariableController.php(123): Pterodactyl\Services\Eggs\Variables\VariableUpdateService->handle(Object(Pterodactyl\Models\EggVariable), Array)
#6 [internal function]: Pterodactyl\Http\Controllers\Admin\Nests\EggVariableController->update(Object(Pterodactyl\Http\Requests\Admin\Egg\EggVariableFormRequest), Object(Pterodactyl\Models\Egg), Object(Pterodactyl\Models\EggVariable))
#7 /app/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): call_user_func_array(Array, Array)
#8 /app/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\Routing\Controller->callAction('update', Array)
#9 /app/vendor/laravel/framework/src/Illuminate/Routing/Route.php(219): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(Pterodactyl\Http\Controllers\Admin\Nests\EggVariableController), 'update')
#10 /app/vendor/laravel/framework/src/Illuminate/Routing/Route.php(176): Illuminate\Routing\Route->runController()
#11 /app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(681): Illuminate\Routing\Route->run()
#12 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(130): Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#13 /app/app/Http/Middleware/AdminAuthenticate.php(33): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#14 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Pterodactyl\Http\Middleware\AdminAuthenticate->handle(Object(Illuminate\Http\Request), Object(Closure))
#15 /app/app/Http/Middleware/RequireTwoFactorAuthentication.php(76): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#16 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Pterodactyl\Http\Middleware\RequireTwoFactorAuthentication->handle(Object(Illuminate\Http\Request), Object(Closure))
#17 /app/app/Http/Middleware/LanguageMiddleware.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#18 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Pterodactyl\Http\Middleware\LanguageMiddleware->handle(Object(Illuminate\Http\Request), Object(Closure))
#19 /app/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#20 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))
#21 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(76): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#22 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#23 /app/vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php(58): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#24 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Session\Middleware\AuthenticateSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#25 /app/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(43): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#26 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Auth\Middleware\Authenticate->handle(Object(Illuminate\Http\Request), Object(Closure))
#27 /app/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#28 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#29 /app/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(56): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#30 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#31 /app/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#32 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
#33 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(105): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#34 /app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(683): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#35 /app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(658): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#36 /app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(624): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route))
#37 /app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(613): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#38 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(170): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#39 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(130): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#40 /app/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#41 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Fideloper\Proxy\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure))
#42 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#43 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#44 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#45 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#46 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#47 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure))
#48 /app/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(66): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#49 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
#50 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(63): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#51 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#52 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(105): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#53 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(145): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#54 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(110): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#55 /app/public/index.php(53): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#56 {main} 

@parkervcp parkervcp reopened this Jun 29, 2020
@DaneEveritt
Copy link
Member

DaneEveritt commented Jun 29, 2020

What version of the panel are you running @parkervcp? Your code isn't being split at all which makes me think there is some other issue at play.

Line 84 of VariableUpdateService from your stack also points to a line above the code I added, making me think it isn't up to date.

I'm closing this again as well, if it is truly broken (which I don't think it is) it should have a new issue opened.

@parkervcp
Copy link
Member

so docker-compose restart loaded the old beta 3 docker image and not the latest beta 5 one.

I ran into this on 0.7 which is how I go pointed at this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something that's not working as it's intended to be.
Projects
None yet
Development

No branches or pull requests

3 participants