diff --git a/src/Symfony/Bundle/SecurityBundle/Security/FirewallMap.php b/src/Symfony/Bundle/SecurityBundle/Security/FirewallMap.php index f02b4c2d4510..64ceb2313ed0 100644 --- a/src/Symfony/Bundle/SecurityBundle/Security/FirewallMap.php +++ b/src/Symfony/Bundle/SecurityBundle/Security/FirewallMap.php @@ -67,7 +67,7 @@ private function getFirewallContext(Request $request): ?FirewallContext $context = $this->container->get($contextId); if ($context->getConfig()?->isStateless() && !$request->attributes->has('_stateless')) { - $request->attributes->set('_stateless', true); + $request->setStateless(); } return $context; diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Security/FirewallMapTest.php b/src/Symfony/Bundle/SecurityBundle/Tests/Security/FirewallMapTest.php index fdf9c3d53a3c..b100d5a707db 100644 --- a/src/Symfony/Bundle/SecurityBundle/Tests/Security/FirewallMapTest.php +++ b/src/Symfony/Bundle/SecurityBundle/Tests/Security/FirewallMapTest.php @@ -88,7 +88,7 @@ public function testGetListeners(Request $request, bool $expectedState) $this->assertEquals([[$listener], $exceptionListener, $logoutListener], $firewallMap->getListeners($request)); $this->assertEquals($firewallConfig, $firewallMap->getFirewallConfig($request)); $this->assertEquals('security.firewall.map.context.foo', $request->attributes->get(self::ATTRIBUTE_FIREWALL_CONTEXT)); - $this->assertEquals($expectedState, $request->attributes->get('_stateless')); + $this->assertEquals($expectedState, $request->isStateless()); } public static function providesStatefulStatelessRequests(): \Generator diff --git a/src/Symfony/Bundle/SecurityBundle/composer.json b/src/Symfony/Bundle/SecurityBundle/composer.json index 7267fa759094..8e1ee62a53e2 100644 --- a/src/Symfony/Bundle/SecurityBundle/composer.json +++ b/src/Symfony/Bundle/SecurityBundle/composer.json @@ -24,7 +24,7 @@ "symfony/dependency-injection": "^6.4|^7.0", "symfony/event-dispatcher": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-foundation": "^7.2", "symfony/password-hasher": "^6.4|^7.0", "symfony/security-core": "^7.2", "symfony/security-csrf": "^6.4|^7.0", diff --git a/src/Symfony/Bundle/WebProfilerBundle/Controller/ProfilerController.php b/src/Symfony/Bundle/WebProfilerBundle/Controller/ProfilerController.php index 79db452019ab..50372c20540d 100644 --- a/src/Symfony/Bundle/WebProfilerBundle/Controller/ProfilerController.php +++ b/src/Symfony/Bundle/WebProfilerBundle/Controller/ProfilerController.php @@ -127,7 +127,7 @@ public function toolbarAction(Request $request, ?string $token = null): Response throw new NotFoundHttpException('The profiler must be enabled.'); } - if (!$request->attributes->getBoolean('_stateless') && $request->hasSession() + if (!$request->isStateless() && $request->hasSession() && ($session = $request->getSession())->isStarted() && $session->getFlashBag() instanceof AutoExpireFlashBag ) { // keep current flashes for one more request if using AutoExpireFlashBag @@ -174,7 +174,7 @@ public function searchBarAction(Request $request): Response $this->cspHandler?->disableCsp(); $session = null; - if (!$request->attributes->getBoolean('_stateless') && $request->hasSession()) { + if (!$request->isStateless() && $request->hasSession()) { $session = $request->getSession(); } @@ -254,7 +254,7 @@ public function searchAction(Request $request): Response $token = $request->query->get('token'); $profileType = $request->query->get('type', 'request'); - if (!$request->attributes->getBoolean('_stateless') && $request->hasSession()) { + if (!$request->isStateless() && $request->hasSession()) { $session = $request->getSession(); $session->set('_profiler_search_ip', $ip); diff --git a/src/Symfony/Bundle/WebProfilerBundle/composer.json b/src/Symfony/Bundle/WebProfilerBundle/composer.json index a6a1cf2df097..fd73e35b1d44 100644 --- a/src/Symfony/Bundle/WebProfilerBundle/composer.json +++ b/src/Symfony/Bundle/WebProfilerBundle/composer.json @@ -20,6 +20,7 @@ "symfony/config": "^6.4|^7.0", "symfony/framework-bundle": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", + "symfony/http-foundation": "^7.2", "symfony/routing": "^6.4|^7.0", "symfony/twig-bundle": "^6.4|^7.0", "twig/twig": "^3.10" diff --git a/src/Symfony/Component/HttpFoundation/CHANGELOG.md b/src/Symfony/Component/HttpFoundation/CHANGELOG.md index 64c2d38f2de2..7f6ad36eafce 100644 --- a/src/Symfony/Component/HttpFoundation/CHANGELOG.md +++ b/src/Symfony/Component/HttpFoundation/CHANGELOG.md @@ -5,6 +5,7 @@ CHANGELOG --- * Add optional `$requests` argument to `RequestStack::__construct()` + * Add `Request::isStateless()` and `Request::setStateless()` 7.1 --- diff --git a/src/Symfony/Component/HttpFoundation/Request.php b/src/Symfony/Component/HttpFoundation/Request.php index c17d1d10c39f..af2e84617021 100644 --- a/src/Symfony/Component/HttpFoundation/Request.php +++ b/src/Symfony/Component/HttpFoundation/Request.php @@ -651,6 +651,16 @@ public function get(string $key, mixed $default = null): mixed return $default; } + public function setStateless(bool $stateless = true): void + { + $this->attributes->set('_stateless', $stateless); + } + + public function isStateless(): bool + { + return $this->attributes->getBoolean('_stateless'); + } + /** * Gets the Session. * diff --git a/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php b/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php index 235bd4c74f2d..b49ca5c76cbb 100644 --- a/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php +++ b/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php @@ -62,7 +62,7 @@ public function collect(Request $request, Response $response, ?\Throwable $excep $sessionMetadata = []; $sessionAttributes = []; $flashes = []; - if (!$request->attributes->getBoolean('_stateless') && $request->hasSession()) { + if (!$request->isStateless() && $request->hasSession()) { $session = $request->getSession(); if ($session->isStarted()) { $sessionMetadata['Created'] = date(\DATE_RFC822, $session->getMetadataBag()->getCreated()); @@ -106,7 +106,7 @@ public function collect(Request $request, Response $response, ?\Throwable $excep 'session_metadata' => $sessionMetadata, 'session_attributes' => $sessionAttributes, 'session_usages' => array_values($this->sessionUsages), - 'stateless_check' => $this->requestStack?->getMainRequest()?->attributes->get('_stateless') ?? false, + 'stateless_check' => $this->requestStack?->getMainRequest()?->isStateless() ?? false, 'flashes' => $flashes, 'path_info' => $request->getPathInfo(), 'controller' => 'n/a', diff --git a/src/Symfony/Component/HttpKernel/EventListener/AbstractSessionListener.php b/src/Symfony/Component/HttpKernel/EventListener/AbstractSessionListener.php index 5c9517be6557..2d84f525088c 100644 --- a/src/Symfony/Component/HttpKernel/EventListener/AbstractSessionListener.php +++ b/src/Symfony/Component/HttpKernel/EventListener/AbstractSessionListener.php @@ -206,7 +206,7 @@ public function onKernelResponse(ResponseEvent $event): void ->headers->addCacheControlDirective('must-revalidate'); } - if (!$event->getRequest()->attributes->get('_stateless', false)) { + if (!$event->getRequest()->isStateless()) { return; } @@ -239,7 +239,7 @@ public function onSessionUsage(): void $stateless = false; $clonedRequestStack = clone $requestStack; while (null !== ($request = $clonedRequestStack->pop()) && !$stateless) { - $stateless = $request->attributes->get('_stateless'); + $stateless = $request->isStateless(); } if (!$stateless) { diff --git a/src/Symfony/Component/HttpKernel/EventListener/ProfilerListener.php b/src/Symfony/Component/HttpKernel/EventListener/ProfilerListener.php index ecaaceb9488b..545bb86e8277 100644 --- a/src/Symfony/Component/HttpKernel/EventListener/ProfilerListener.php +++ b/src/Symfony/Component/HttpKernel/EventListener/ProfilerListener.php @@ -91,7 +91,7 @@ public function onKernelResponse(ResponseEvent $event): void return; } - $session = !$request->attributes->getBoolean('_stateless') && $request->hasPreviousSession() ? $request->getSession() : null; + $session = !$request->isStateless() && $request->hasPreviousSession() ? $request->getSession() : null; if ($session instanceof Session) { $usageIndexValue = $usageIndexReference = &$session->getUsageIndex(); diff --git a/src/Symfony/Component/HttpKernel/Fragment/InlineFragmentRenderer.php b/src/Symfony/Component/HttpKernel/Fragment/InlineFragmentRenderer.php index 2dbe7be602b6..98f60eb3235c 100644 --- a/src/Symfony/Component/HttpKernel/Fragment/InlineFragmentRenderer.php +++ b/src/Symfony/Component/HttpKernel/Fragment/InlineFragmentRenderer.php @@ -125,7 +125,7 @@ protected function createSubRequest(string $uri, Request $request): Request $subRequest->setLocale($request->getLocale()); } if ($request->attributes->has('_stateless')) { - $subRequest->attributes->set('_stateless', $request->attributes->get('_stateless')); + $subRequest->setStateless($request->isStateless()); } if ($request->attributes->has('_check_controller_is_allowed')) { $subRequest->attributes->set('_check_controller_is_allowed', $request->attributes->get('_check_controller_is_allowed')); diff --git a/src/Symfony/Component/HttpKernel/Tests/DataCollector/RequestDataCollectorTest.php b/src/Symfony/Component/HttpKernel/Tests/DataCollector/RequestDataCollectorTest.php index 65608851de8e..d313638aee3b 100644 --- a/src/Symfony/Component/HttpKernel/Tests/DataCollector/RequestDataCollectorTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/DataCollector/RequestDataCollectorTest.php @@ -318,7 +318,7 @@ public function testStatelessCheck() $requestStack = new RequestStack(); $request = $this->createRequest(); - $request->attributes->set('_stateless', true); + $request->setStateless(); $requestStack->push($request); $collector = new RequestDataCollector($requestStack); diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php index 2aa5d622e27b..a72206ce2c39 100644 --- a/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php @@ -753,7 +753,7 @@ public function testSessionUsageExceptionIfStatelessAndSessionUsed() $kernel = $this->createMock(HttpKernelInterface::class); $request = new Request(); - $request->attributes->set('_stateless', true); + $request->setStateless(); $listener->onKernelRequest(new RequestEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST)); $request->getSession(); @@ -780,7 +780,7 @@ public function testSessionUsageLogIfStatelessAndSessionUsed() $kernel = $this->createMock(HttpKernelInterface::class); $request = new Request(); - $request->attributes->set('_stateless', true); + $request->setStateless(); $listener->onKernelRequest(new RequestEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST)); $request->getSession(); @@ -805,7 +805,7 @@ public function testSessionIsSavedWhenUnexpectedSessionExceptionThrown() $kernel = $this->createMock(HttpKernelInterface::class); $request = new Request(); - $request->attributes->set('_stateless', true); + $request->setStateless(); $listener->onKernelRequest(new RequestEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST)); $request->getSession(); @@ -824,7 +824,7 @@ public function testSessionUsageCallbackWhenDebugAndStateless() $requestStack = new RequestStack(); $request = new Request(); - $request->attributes->set('_stateless', true); + $request->setStateless(); $requestStack->push(new Request()); $requestStack->push($request); @@ -849,7 +849,7 @@ public function testSessionUsageCallbackWhenNoDebug() $session->expects($this->exactly(0))->method('save'); $request = new Request(); - $request->attributes->set('_stateless', true); + $request->setStateless(); $requestStack = new RequestStack(); $requestStack->push($request); diff --git a/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php b/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php index 2d492c535928..da98139cc378 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php @@ -275,13 +275,13 @@ public function testIpAddressOfRangedTrustedProxyIsSetAsRemote() public function testStatelessAttributeIsForwardedByDefault() { $request = Request::create('/'); - $request->attributes->set('_stateless', true); + $request->setStateless(); $kernel = $this->createMock(HttpKernelInterface::class); $kernel ->expects($this->once()) ->method('handle') - ->with($this->callback(static fn (Request $subRequest) => $subRequest->attributes->get('_stateless'))) + ->with($this->callback(static fn (Request $subRequest) => $subRequest->isStateless())) ; $strategy = new InlineFragmentRenderer($kernel); $strategy->render('/', $request); @@ -290,13 +290,13 @@ public function testStatelessAttributeIsForwardedByDefault() public function testStatelessAttributeCanBeDisabled() { $request = Request::create('/'); - $request->attributes->set('_stateless', true); + $request->setStateless(); $kernel = $this->createMock(HttpKernelInterface::class); $kernel ->expects($this->once()) ->method('handle') - ->with($this->callback(static fn (Request $subRequest) => !$subRequest->attributes->get('_stateless'))) + ->with($this->callback(static fn (Request $subRequest) => !$subRequest->isStateless())) ; $strategy = new InlineFragmentRenderer($kernel); $strategy->render(new ControllerReference('main_controller', ['_stateless' => false]), $request); diff --git a/src/Symfony/Component/HttpKernel/composer.json b/src/Symfony/Component/HttpKernel/composer.json index 8e54c82c9ae0..52c3abd2873f 100644 --- a/src/Symfony/Component/HttpKernel/composer.json +++ b/src/Symfony/Component/HttpKernel/composer.json @@ -20,7 +20,7 @@ "symfony/deprecation-contracts": "^2.5|^3", "symfony/error-handler": "^6.4|^7.0", "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-foundation": "^7.2", "symfony/polyfill-ctype": "^1.8", "psr/log": "^1|^2|^3" }, diff --git a/src/Symfony/Component/Security/Http/Authentication/DefaultAuthenticationFailureHandler.php b/src/Symfony/Component/Security/Http/Authentication/DefaultAuthenticationFailureHandler.php index 4003b7d1b178..b13b29a33b50 100644 --- a/src/Symfony/Component/Security/Http/Authentication/DefaultAuthenticationFailureHandler.php +++ b/src/Symfony/Component/Security/Http/Authentication/DefaultAuthenticationFailureHandler.php @@ -86,7 +86,7 @@ public function onAuthenticationFailure(Request $request, AuthenticationExceptio $this->logger?->debug('Authentication failure, redirect triggered.', ['failure_path' => $options['failure_path']]); - if (!$request->attributes->getBoolean('_stateless')) { + if (!$request->isStateless()) { $request->getSession()->set(SecurityRequestAttributes::AUTHENTICATION_ERROR, $exception); } diff --git a/src/Symfony/Component/Security/Http/Authentication/DefaultAuthenticationSuccessHandler.php b/src/Symfony/Component/Security/Http/Authentication/DefaultAuthenticationSuccessHandler.php index 5f69def45397..ff9cf7d53da1 100644 --- a/src/Symfony/Component/Security/Http/Authentication/DefaultAuthenticationSuccessHandler.php +++ b/src/Symfony/Component/Security/Http/Authentication/DefaultAuthenticationSuccessHandler.php @@ -99,7 +99,7 @@ protected function determineTargetUrl(Request $request): string } $firewallName = $this->getFirewallName(); - if (null !== $firewallName && !$request->attributes->getBoolean('_stateless') && $targetUrl = $this->getTargetPath($request->getSession(), $firewallName)) { + if (null !== $firewallName && !$request->isStateless() && $targetUrl = $this->getTargetPath($request->getSession(), $firewallName)) { $this->removeTargetPath($request->getSession(), $firewallName); return $targetUrl; diff --git a/src/Symfony/Component/Security/Http/Firewall/ContextListener.php b/src/Symfony/Component/Security/Http/Firewall/ContextListener.php index 47bd62afb242..2ebd72eaf13f 100644 --- a/src/Symfony/Component/Security/Http/Firewall/ContextListener.php +++ b/src/Symfony/Component/Security/Http/Firewall/ContextListener.php @@ -85,7 +85,7 @@ public function authenticate(RequestEvent $event): void } $request = $event->getRequest(); - $session = !$request->attributes->getBoolean('_stateless') && $request->hasPreviousSession() ? $request->getSession() : null; + $session = !$request->isStateless() && $request->hasPreviousSession() ? $request->getSession() : null; $request->attributes->set('_security_firewall_run', $this->sessionKey); diff --git a/src/Symfony/Component/Security/Http/Tests/Authentication/DefaultAuthenticationFailureHandlerTest.php b/src/Symfony/Component/Security/Http/Tests/Authentication/DefaultAuthenticationFailureHandlerTest.php index e29d62dc2ed2..65888f3fbc3d 100644 --- a/src/Symfony/Component/Security/Http/Tests/Authentication/DefaultAuthenticationFailureHandlerTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Authentication/DefaultAuthenticationFailureHandlerTest.php @@ -47,7 +47,6 @@ protected function setUp(): void $this->session = $this->createMock(SessionInterface::class); $this->request = $this->createMock(Request::class); - $this->request->attributes = new ParameterBag(['_stateless' => false]); $this->request->expects($this->any())->method('getSession')->willReturn($this->session); $this->exception = $this->getMockBuilder(AuthenticationException::class)->onlyMethods(['getMessage'])->getMock(); } @@ -93,7 +92,7 @@ public function testExceptionIsPersistedInSession() public function testExceptionIsNotPersistedInSessionOnStatelessRequest() { - $this->request->attributes = new ParameterBag(['_stateless' => true]); + $this->request->method('isStateless')->willReturn(true); $this->session->expects($this->never()) ->method('set')->with(SecurityRequestAttributes::AUTHENTICATION_ERROR, $this->exception); diff --git a/src/Symfony/Component/Security/Http/Tests/Authentication/DefaultAuthenticationSuccessHandlerTest.php b/src/Symfony/Component/Security/Http/Tests/Authentication/DefaultAuthenticationSuccessHandlerTest.php index a9750223f089..ab06105895ad 100644 --- a/src/Symfony/Component/Security/Http/Tests/Authentication/DefaultAuthenticationSuccessHandlerTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Authentication/DefaultAuthenticationSuccessHandlerTest.php @@ -63,7 +63,7 @@ public function testStatelessRequestRedirections() $session->expects($this->never())->method('remove')->with('_security.admin.target_path'); $statelessRequest = Request::create('/'); $statelessRequest->setSession($session); - $statelessRequest->attributes->set('_stateless', true); + $statelessRequest->setStateless(); $urlGenerator = $this->createMock(UrlGeneratorInterface::class); $urlGenerator->expects($this->any())->method('generate')->willReturn('http://localhost/login'); diff --git a/src/Symfony/Component/Security/Http/composer.json b/src/Symfony/Component/Security/Http/composer.json index 9a443fe8ce62..74154829b557 100644 --- a/src/Symfony/Component/Security/Http/composer.json +++ b/src/Symfony/Component/Security/Http/composer.json @@ -18,7 +18,7 @@ "require": { "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-foundation": "^7.2", "symfony/http-kernel": "^6.4|^7.0", "symfony/polyfill-mbstring": "~1.0", "symfony/property-access": "^6.4|^7.0", pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy