Skip to content

Commit

Permalink
Action params can also be arrays of whatever, not just strings (#474)
Browse files Browse the repository at this point in the history
Docblocks now reflect this.

This reverts e297212 of #443 which means no exception is being thrown on non-string params when some bots scan try to exploit some bugs with arrays.
  • Loading branch information
spaze authored Jan 18, 2025
2 parents fdb8784 + 41ab924 commit 07f9043
Show file tree
Hide file tree
Showing 13 changed files with 18 additions and 181 deletions.
1 change: 0 additions & 1 deletion app/config/services.neon
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ services:
cliArgs:
type: MichalSpacekCz\Application\Cli\CliArgs
imported: true
- MichalSpacekCz\Application\ComponentParameters
- MichalSpacekCz\Application\Error
- MichalSpacekCz\Application\LinkGenerator
localeLinkGenerator: MichalSpacekCz\Application\Locale\LocaleLinkGenerator(languages: %locales.languages%)
Expand Down
21 changes: 0 additions & 21 deletions app/src/Application/AppRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
namespace MichalSpacekCz\Application;

use MichalSpacekCz\Application\Exceptions\NoOriginalRequestException;
use MichalSpacekCz\Application\Exceptions\ParameterNotStringException;
use MichalSpacekCz\ShouldNotHappenException;
use Nette\Application\Request;
use Throwable;
Expand All @@ -28,26 +27,6 @@ public function getOriginalRequest(?Request $request): Request
}


/**
* @return array<string, string|null>
* @throws NoOriginalRequestException
* @throws ParameterNotStringException
*/
public function getOriginalRequestStringParameters(?Request $request): array
{
$params = [];
foreach ($this->getOriginalRequest($request)->getParameters() as $name => $value) {
$name = (string)$name;
if ($value === null || is_string($value)) {
$params[$name] = $value;
} else {
throw new ParameterNotStringException($name, get_debug_type($value));
}
}
return $params;
}


public function getException(Request $request): Throwable
{
$e = $request->getParameter('exception');
Expand Down
30 changes: 0 additions & 30 deletions app/src/Application/ComponentParameters.php

This file was deleted.

16 changes: 0 additions & 16 deletions app/src/Application/Exceptions/ParameterNotStringException.php

This file was deleted.

2 changes: 1 addition & 1 deletion app/src/Application/LinkGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public function __construct(
/**
* Same as `Nette\Application\LinkGenerator::link()` but will always return just string, not string|null.
*
* @param array<int|string, string|null> $args
* @param array<array-key, mixed> $args
* @throws InvalidLinkException
*/
public function link(string $destination, array $args = [], ?NetteLinkGenerator $linkGenerator = null): string
Expand Down
10 changes: 5 additions & 5 deletions app/src/Application/Locale/LocaleLinkGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public function __construct(
* Generates localized URLs.
*
* @param string $destination destination in format "[[[module:]presenter:]action] [#fragment]"
* @param array<string, list<string>|array<string, string|null>> $params of locale => [position|name => value]
* @param array<string, list<string>|array<array-key, mixed>> $params of locale => [position|name => value]
* @return array<string, LocaleLink> of locale => URL
* @throws InvalidLinkException
*/
Expand Down Expand Up @@ -70,8 +70,8 @@ public function links(string $destination, array $params = []): array
/**
* Return default params for all locales.
*
* @param array<string, string|null> $params
* @return array<string, array<string, string|null>>
* @param array<array-key, mixed> $params
* @return array<string, array<array-key, mixed>>
*/
public function defaultParams(array $params): array
{
Expand Down Expand Up @@ -114,9 +114,9 @@ public function allLinks(string $destination, array $params = []): array


/**
* @param array<string, list<string>|array<string, string|null>> $params
* @param array<string, list<string>|array<array-key, mixed>> $params
* @param string $locale
* @return list<string>|array<string, string|null>
* @return list<string>|array<array-key, mixed>
*/
private function getParams(array $params, string $locale): array
{
Expand Down
4 changes: 2 additions & 2 deletions app/src/Training/TrainingLocales.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ public function getLocaleActions(string $action): array
/**
* Translated locale parameters for trainings.
*
* @param array<string, string|null> $defaultParams
* @return array<string, array<string, string|null>>
* @param array<array-key, mixed> $defaultParams
* @return array<string, array<array-key, mixed>>
*/
public function getLocaleLinkParams(?string $trainingAction, array $defaultParams): array
{
Expand Down
24 changes: 3 additions & 21 deletions app/src/Www/Presenters/BasePresenter.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
namespace MichalSpacekCz\Www\Presenters;

use DateTimeInterface;
use MichalSpacekCz\Application\ComponentParameters;
use MichalSpacekCz\Application\Exceptions\ParameterNotStringException;
use MichalSpacekCz\Application\Locale\LocaleLink;
use MichalSpacekCz\Application\Locale\LocaleLinkGenerator;
use MichalSpacekCz\Css\CriticalCss;
Expand Down Expand Up @@ -37,8 +35,6 @@ abstract class BasePresenter extends Presenter

private CriticalCssFactory $criticalCssFactory;

private ComponentParameters $componentParameters;

private FourOhFourButFound $fourOhFourButFound;


Expand Down Expand Up @@ -87,15 +83,6 @@ public function injectCriticalCssFactory(CriticalCssFactory $criticalCssFactory)
}


/**
* @internal
*/
public function injectComponentParameters(ComponentParameters $componentParameters): void
{
$this->componentParameters = $componentParameters;
}


/**
* @internal
*/
Expand All @@ -117,9 +104,6 @@ protected function startup(): void
}


/**
* @throws ParameterNotStringException
*/
#[Override]
public function beforeRender(): void
{
Expand All @@ -138,8 +122,7 @@ protected function getLocaleLinksGeneratorDestination(): string


/**
* @return array<string, array<string, string|null>>
* @throws ParameterNotStringException
* @return array<string, array<array-key, mixed>>
*/
protected function getLocaleLinksGeneratorParams(): array
{
Expand Down Expand Up @@ -170,12 +153,11 @@ protected function getLocaleLinkAction(): string
/**
* Default parameters for locale links.
*
* @return array<string, array<string, string|null>>
* @throws ParameterNotStringException
* @return array<string, array<array-key, mixed>>
*/
protected function getLocaleLinkParams(): array
{
return $this->localeLinkGenerator->defaultParams($this->componentParameters->getStringParameters($this));
return $this->localeLinkGenerator->defaultParams($this->getParameters());
}


Expand Down
8 changes: 2 additions & 6 deletions app/src/Www/Presenters/CompanyTrainingsPresenter.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
namespace MichalSpacekCz\Www\Presenters;

use Contributte\Translation\Translator;
use MichalSpacekCz\Application\ComponentParameters;
use MichalSpacekCz\Application\Exceptions\ParameterNotStringException;
use MichalSpacekCz\Formatter\TexyFormatter;
use MichalSpacekCz\Training\Company\CompanyTrainings;
use MichalSpacekCz\Training\Discontinued\DiscontinuedTrainings;
Expand All @@ -32,7 +30,6 @@ public function __construct(
private readonly TrainingReviews $trainingReviews,
private readonly Prices $prices,
private readonly Translator $translator,
private readonly ComponentParameters $componentParameters,
) {
parent::__construct();
}
Expand Down Expand Up @@ -72,13 +69,12 @@ public function actionTraining(string $name): void
/**
* Translated locale parameters for trainings.
*
* @return array<string, array<string, string|null>>
* @throws ParameterNotStringException
* @return array<string, array<array-key, mixed>>
*/
#[Override]
protected function getLocaleLinkParams(): array
{
return $this->trainingLocales->getLocaleLinkParams($this->trainingAction, $this->componentParameters->getStringParameters($this));
return $this->trainingLocales->getLocaleLinkParams($this->trainingAction, $this->getParameters());
}

}
8 changes: 3 additions & 5 deletions app/src/Www/Presenters/ErrorPresenter.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
use Contributte\Translation\Translator;
use MichalSpacekCz\Application\AppRequest;
use MichalSpacekCz\Application\Exceptions\NoOriginalRequestException;
use MichalSpacekCz\Application\Exceptions\ParameterNotStringException;
use MichalSpacekCz\Application\Locale\LocaleLink;
use MichalSpacekCz\Application\Locale\LocaleLinkGenerator;
use MichalSpacekCz\ShouldNotHappenException;
Expand Down Expand Up @@ -112,15 +111,14 @@ protected function getLocaleLinkAction(): string
/**
* Get original parameters for locale links.
*
* @return array<string, array<string, string|null>>
* @return array<string, array<array-key, mixed>>
* @throws NoOriginalRequestException
* @throws ParameterNotStringException
*/
#[Override]
protected function getLocaleLinkParams(): array
{
$params = $this->appRequest->getOriginalRequestStringParameters($this->getRequest());
return $this->localeLinkGenerator->defaultParams($params);
$requestParam = $this->appRequest->getOriginalRequest($this->getRequest());
return $this->localeLinkGenerator->defaultParams($requestParam->getParameters());
}

}
8 changes: 2 additions & 6 deletions app/src/Www/Presenters/TrainingsPresenter.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
namespace MichalSpacekCz\Www\Presenters;

use Contributte\Translation\Translator;
use MichalSpacekCz\Application\ComponentParameters;
use MichalSpacekCz\Application\Exceptions\ParameterNotStringException;
use MichalSpacekCz\CompanyInfo\CompanyInfo;
use MichalSpacekCz\Form\TrainingApplicationFormFactory;
use MichalSpacekCz\Form\TrainingApplicationPreliminaryFormFactory;
Expand Down Expand Up @@ -66,7 +64,6 @@ public function __construct(
private readonly Translator $translator,
private readonly Session $sessionHandler,
private readonly Robots $robots,
private readonly ComponentParameters $componentParameters,
) {
parent::__construct();
}
Expand Down Expand Up @@ -308,13 +305,12 @@ protected function createComponentOtherUpcomingDatesList(): UpcomingTrainingDate
/**
* Translated locale parameters for trainings.
*
* @return array<string, array<string, string|null>>
* @throws ParameterNotStringException
* @return array<string, array<array-key, mixed>>
*/
#[Override]
protected function getLocaleLinkParams(): array
{
return $this->trainingLocales->getLocaleLinkParams($this->trainingAction, $this->componentParameters->getStringParameters($this));
return $this->trainingLocales->getLocaleLinkParams($this->trainingAction, $this->getParameters());
}


Expand Down
21 changes: 0 additions & 21 deletions app/tests/Application/AppRequestTest.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ use DateTime;
use Error;
use Exception;
use MichalSpacekCz\Application\Exceptions\NoOriginalRequestException;
use MichalSpacekCz\Application\Exceptions\ParameterNotStringException;
use MichalSpacekCz\ShouldNotHappenException;
use MichalSpacekCz\Test\TestCaseRunner;
use Nette\Application\Request;
Expand Down Expand Up @@ -64,26 +63,6 @@ class AppRequestTest extends TestCase
}


public function testGetOriginalRequestStringParameters(): void
{
$original = new Request('bar', params: ['foo' => 'bar', 1 => 'one']);
$request = new Request('foo');
$request->setParameters(['request' => $original]);
Assert::same(['foo' => 'bar', '1' => 'one'], $this->appRequest->getOriginalRequestStringParameters($request));
}


public function testGetOriginalRequestStringParametersException(): void
{
$original = new Request('bar', params: ['foo' => 'bar', 'one' => 1]);
$request = new Request('foo');
$request->setParameters(['request' => $original]);
Assert::exception(function () use ($request): void {
$this->appRequest->getOriginalRequestStringParameters($request);
}, ParameterNotStringException::class, "Component parameter 'one' is not a string but it's a int");
}


public function testGetExceptionNoException(): void
{
Assert::exception(function (): void {
Expand Down
46 changes: 0 additions & 46 deletions app/tests/Application/ComponentParametersTest.phpt

This file was deleted.

0 comments on commit 07f9043

Please sign in to comment.