Skip to content

Commit a3710a8

Browse files
authored
fix: validation referer (#511)
1 parent 5017c5f commit a3710a8

File tree

12 files changed

+42
-49
lines changed

12 files changed

+42
-49
lines changed

src/Tempest/Debug/src/Debug.php

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,27 @@ private function writeToOut(array $items, string $callPath): void
8282
$output = $this->createDump($item);
8383

8484
fwrite(STDOUT, $output);
85+
86+
fwrite(STDOUT, $callPath . PHP_EOL);
8587
} else {
88+
echo sprintf(
89+
'<span style="
90+
display:inline-block;
91+
color: #fff;
92+
font-family: %s;
93+
padding: 2px 4px;
94+
font-size: 0.8rem;
95+
margin-bottom: -12px;
96+
background: #0071BC;"
97+
>%s (%s)</span>',
98+
'Source Code Pro, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace',
99+
$key,
100+
$callPath,
101+
);
102+
86103
VarDumper::dump($item);
87104
}
88105
}
89-
90-
if (defined('STDOUT')) {
91-
fwrite(STDOUT, $callPath . PHP_EOL);
92-
}
93106
}
94107

95108
private function createDump(mixed $input): string

src/Tempest/Http/src/HttpApplication.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Tempest\Core\Kernel;
1111
use Tempest\Core\Tempest;
1212
use function Tempest\env;
13+
use Tempest\Http\Session\Session;
1314
use Tempest\Log\Channels\AppendLogChannel;
1415
use Tempest\Log\LogConfig;
1516
use Tempest\Support\PathHelper;
@@ -57,6 +58,8 @@ public function run(): void
5758
$responseSender->send(
5859
$router->dispatch($psrRequest),
5960
);
61+
62+
$this->container->get(Session::class)->cleanup();
6063
} catch (Throwable $throwable) {
6164
foreach ($this->container->get(AppConfig::class)->exceptionHandlers as $exceptionHandler) {
6265
$exceptionHandler->handle($throwable);

src/Tempest/Http/src/Responses/Invalid.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Tempest\Http\Responses;
66

7+
use Exception;
78
use Psr\Http\Message\ServerRequestInterface as PsrRequest;
89
use Tempest\Http\IsResponse;
910
use Tempest\Http\Request;
@@ -20,10 +21,10 @@ public function __construct(
2021
/** @var \Tempest\Validation\Rule[][] $failingRules */
2122
array $failingRules = [],
2223
) {
23-
$uri = $request instanceof PsrRequest ? (string)$request->getUri() : $request->getUri();
24+
$referer = $request->getHeader('referer')[0] ?? throw new Exception("No referer found, could not redirect (this shouldn't happen, please create a bug report)");
2425
$body = $request instanceof PsrRequest ? $request->getParsedBody() : $request->getBody();
2526

26-
$this->addHeader('Location', $uri);
27+
$this->addHeader('Location', $referer);
2728
$this->status = Status::FOUND;
2829
$this->flash(Session::VALIDATION_ERRORS, $failingRules);
2930
$this->flash(Session::ORIGINAL_VALUES, $body);

src/Tempest/Http/src/RouterInitializer.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
use Tempest\Container\Initializer;
99
use Tempest\Container\Singleton;
1010
use Tempest\Http\Cookie\SetCookieMiddleware;
11-
use Tempest\Http\Session\SessionMiddleware;
1211

1312
final readonly class RouterInitializer implements Initializer
1413
{
@@ -18,7 +17,6 @@ public function initialize(Container $container): Router
1817
$router = $container->get(GenericRouter::class);
1918

2019
$router->addMiddleware(SetCookieMiddleware::class);
21-
$router->addMiddleware(SessionMiddleware::class);
2220

2321
return $router;
2422
}

src/Tempest/Http/src/Session/Session.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public function get(string $key, mixed $default = null): mixed
4040
$value = $this->getSessionManager()->get($this->id, $key, $default);
4141

4242
if ($value instanceof FlashValue) {
43-
$this->expiredKeys[] = $key;
43+
$this->expiredKeys[$key] = $key;
4444
$value = $value->value;
4545
}
4646

src/Tempest/Http/src/Session/SessionInitializer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@
66

77
use Tempest\Container\Container;
88
use Tempest\Container\Initializer;
9+
use Tempest\Container\Singleton;
910

1011
final readonly class SessionInitializer implements Initializer
1112
{
13+
#[Singleton]
1214
public function initialize(Container $container): Session
1315
{
1416
$sessionManager = $container->get(SessionManager::class);

src/Tempest/Http/src/Session/SessionMiddleware.php

Lines changed: 0 additions & 25 deletions
This file was deleted.

tests/Fixtures/Modules/Form/FormController.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@
1616
#[Get('/form')]
1717
public function index(): View
1818
{
19-
return view('Modules/Form/form.view.php');
19+
return view(__DIR__ . '/../../Modules/Form/form.view.php');
2020
}
2121

22-
#[Post('/form')]
22+
#[Post('/form/store')]
2323
public function store(FormRequest $request): Response
2424
{
2525
return new Ok('Ok!');

tests/Integration/Http/Responses/InvalidTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Tests\Tempest\Integration\Http\Responses;
66

7+
use Psr\Http\Message\ServerRequestInterface as PsrRequest;
78
use Tempest\Http\GenericRequest;
89
use Tempest\Http\Mappers\RequestToPsrRequestMapper;
910
use Tempest\Http\Method;
@@ -21,7 +22,9 @@ final class InvalidTest extends FrameworkIntegrationTestCase
2122
{
2223
public function test_invalid(): void
2324
{
25+
/** @var PsrRequest $request */
2426
$request = map(new GenericRequest(Method::GET, '/original', ['foo' => 'bar']))->with(RequestToPsrRequestMapper::class);
27+
$request = $request->withHeader('Referer', '/original');
2528

2629
$response = new Invalid(
2730
$request,

tests/Integration/Http/SessionFromCookieTest.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,6 @@ public function test_resolving_session_from_cookie(): void
2929
$sessionA = $this->container->get(Session::class);
3030
$sessionA->set('test', 'a');
3131

32-
$cookieManager->set('tempest_session_id', 'session_b');
33-
$sessionB = $this->container->get(Session::class);
34-
$this->assertNull($sessionB->get('test'));
35-
36-
$cookieManager->set('tempest_session_id', 'session_a');
3732
$sessionA = $this->container->get(Session::class);
3833
$this->assertEquals('a', $sessionA->get('test'));
3934
}

0 commit comments

Comments
 (0)