Skip to content

Commit 96ef084

Browse files
committed
Make apply authorization middleware compatible with PSR-15
1 parent 3c2c578 commit 96ef084

File tree

2 files changed

+58
-6
lines changed

2 files changed

+58
-6
lines changed

src/Middleware/ApplyAuthenticationMiddleware.php

+8-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
use Psr\Http\Message\ServerRequestInterface;
1818
use Psr\Http\Server\MiddlewareInterface;
1919
use Psr\Http\Server\RequestHandlerInterface;
20-
use Zend\Diactoros\ResponseFactory;
2120

2221
class ApplyAuthenticationMiddleware implements MiddlewareInterface
2322
{
@@ -58,7 +57,14 @@ public function __invoke(
5857

5958
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
6059
{
61-
return (new ResponseFactory())->createResponse();
60+
if (!$this->apply_on_exit) {
61+
$request = $this->applyToRequest($request);
62+
}
63+
64+
$response = $handler->handle($request);
65+
$response = $this->applyToResponse($request, $response);
66+
67+
return $response;
6268
}
6369

6470
private function applyToRequest(ServerRequestInterface $request): ServerRequestInterface

test/src/ApplyAuthenticationMiddlewareTest.php

+50-4
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,13 @@ public function testUserIsAuthenticated()
124124

125125
/**
126126
* Test if authentication is applied based on request attribute, when middleware is called as PSR-15 middleware.
127+
*
128+
* @dataProvider provideDataForPsr15Test
129+
* @param bool $applyOnExit
127130
*/
128-
public function testUserIsAuthenticatedPsr15()
131+
public function testUserIsAuthenticatedPsr15(
132+
bool $applyOnExit
133+
)
129134
{
130135
$user = new AuthenticatedUser(
131136
1,
@@ -178,10 +183,15 @@ public function testUserIsAuthenticatedPsr15()
178183
]
179184
));
180185

181-
$middleware = new ApplyAuthenticationMiddleware(new RequestValueContainer('test_transport'));
182-
$this->assertFalse($middleware->applyOnExit());
186+
$middleware = new ApplyAuthenticationMiddleware(
187+
new RequestValueContainer('test_transport'),
188+
$applyOnExit
189+
);
190+
191+
$this->assertSame($applyOnExit, $middleware->applyOnExit());
183192

184-
$response = $middleware->process($request,
193+
$response = $middleware->process(
194+
$request,
185195
new class implements RequestHandlerInterface
186196
{
187197
public function handle(ServerRequestInterface $request): ResponseInterface
@@ -200,6 +210,14 @@ public function handle(ServerRequestInterface $request): ResponseInterface
200210
$this->assertContains('my-session-id', $setCookieHeader);
201211
}
202212

213+
public function provideDataForPsr15Test(): array
214+
{
215+
return [
216+
[true],
217+
[false],
218+
];
219+
}
220+
203221
/**
204222
* Test if next middleware in stack is called.
205223
*/
@@ -232,6 +250,34 @@ function (
232250
$this->assertSame('Yes, found!', $response->getHeaderLine('X-Test'));
233251
}
234252

253+
public function testProcessIsCalled()
254+
{
255+
$middlware = new ApplyAuthenticationMiddleware(
256+
new RequestValueContainer('test_transport')
257+
);
258+
259+
$handler = new class implements RequestHandlerInterface
260+
{
261+
private $handleIsCalled = false;
262+
263+
public function handle(ServerRequestInterface $request): ResponseInterface
264+
{
265+
$this->handleIsCalled = true;
266+
return (new ResponseFactory())->createResponse();
267+
}
268+
269+
public function isHandleCalled(): bool
270+
{
271+
return $this->handleIsCalled;
272+
}
273+
};
274+
275+
$response = $middlware->process($this->request, $handler);
276+
$this->assertInstanceOf(ResponseInterface::class, $response);
277+
278+
$this->assertTrue($handler->isHandleCalled());
279+
}
280+
235281
/**
236282
* Test if authentication is applied based on request attribute.
237283
*/

0 commit comments

Comments
 (0)