Updated PathVersionMiddleware so that it is only applied to rest routes

This commit is contained in:
Alejandro Celaya 2017-01-21 20:12:12 +01:00
parent 869865f22a
commit de9d9d8667
4 changed files with 9 additions and 25 deletions

View File

@ -10,6 +10,7 @@ services:
- "8000:80"
volumes:
- ./:/home/shlink/www
- ./docs:/home/shlink/www/public/docs
- ./data/infra/vhost.conf:/etc/nginx/conf.d/shlink-vhost.conf
links:
- shlink_php

View File

@ -5,6 +5,7 @@ return [
'middleware_pipeline' => [
'pre-routing' => [
'path' => '/rest',
'middleware' => [
Middleware\PathVersionMiddleware::class,
],

View File

@ -37,19 +37,13 @@ class PathVersionMiddleware implements MiddlewareInterface
$uri = $request->getUri();
$path = $uri->getPath();
// Exclude non-rest route
if (strpos($path, '/rest') !== 0) {
return $out($request, $response);
}
// If the path does not begin with the version number, prepend v1 by default for retrocompatibility purposes
if (strpos($path, '/rest/v') !== 0) {
if (strpos($path, '/v') !== 0) {
$parts = explode('/', $path);
// Remove the first empty part and the "/rest" prefix
// Remove the first empty part and the
array_shift($parts);
array_shift($parts);
// Prepend the prefix with version
array_unshift($parts, '/rest/v1');
// Prepend the version prefix
array_unshift($parts, '/v1');
$request = $request->withUri($uri->withPath(implode('/', $parts)));
}

View File

@ -25,7 +25,7 @@ class PathVersionMiddlewareTest extends TestCase
*/
public function whenVersionIsProvidedRequestRemainsUnchanged()
{
$request = ServerRequestFactory::fromGlobals()->withUri(new Uri('/rest/v2/foo'));
$request = ServerRequestFactory::fromGlobals()->withUri(new Uri('/v2/foo'));
$test = $this;
$this->middleware->__invoke($request, new Response(), function ($req) use ($request, $test) {
$test->assertSame($request, $req);
@ -37,23 +37,11 @@ class PathVersionMiddlewareTest extends TestCase
*/
public function versionOneIsPrependedWhenNoVersionIsDefined()
{
$request = ServerRequestFactory::fromGlobals()->withUri(new Uri('/rest/bar/baz'));
$request = ServerRequestFactory::fromGlobals()->withUri(new Uri('/bar/baz'));
$test = $this;
$this->middleware->__invoke($request, new Response(), function (Request $req) use ($request, $test) {
$test->assertNotSame($request, $req);
$this->assertEquals('/rest/v1/bar/baz', $req->getUri()->getPath());
});
}
/**
* @test
*/
public function nonRestPathsAreNotProcessed()
{
$request = ServerRequestFactory::fromGlobals()->withUri(new Uri('/non-rest'));
$test = $this;
$this->middleware->__invoke($request, new Response(), function ($req) use ($request, $test) {
$test->assertSame($request, $req);
$this->assertEquals('/v1/bar/baz', $req->getUri()->getPath());
});
}
}