diff --git a/routes/api.php b/routes/api.php index 626a70cae..58db1204a 100644 --- a/routes/api.php +++ b/routes/api.php @@ -432,7 +432,7 @@ $router->get('{id}/files/filter/filename/{pattern}', [ 'uses' => 'Filters\FilenameController@index', - ]); + ])->where('pattern', '.*'); $router->get('{id}/file-labels', [ 'uses' => 'UsedFileLabelsController@index', diff --git a/tests/php/Http/Controllers/Api/Volumes/Filters/FilenameControllerTest.php b/tests/php/Http/Controllers/Api/Volumes/Filters/FilenameControllerTest.php index b437f8a74..8d3a46634 100644 --- a/tests/php/Http/Controllers/Api/Volumes/Filters/FilenameControllerTest.php +++ b/tests/php/Http/Controllers/Api/Volumes/Filters/FilenameControllerTest.php @@ -62,14 +62,34 @@ public function testIndexEscape() { $vid = $this->volume()->id; - $image = ImageTest::create([ + $image1 = ImageTest::create([ 'volume_id' => $vid, 'filename' => 'abcde.jpg', ]); + $image2 = ImageTest::create([ + 'volume_id' => $vid, + 'filename' => '/.jpg', + ]); + $image3 = ImageTest::create([ + 'volume_id' => $vid, + 'filename' => '%2F.jpg', // encodeURIComponent("/") yields "%2F" + ]); + $this->beGuest(); + $response = $this->json('GET', "/api/v1/volumes/{$vid}/files/filter/filename/*cde*%5C") ->assertExactJson([]); $response->assertStatus(200); + + $pattern = rawurlencode("/.jpg"); + $response = $this->json('GET', "/api/v1/volumes/{$vid}/files/filter/filename/$pattern") + ->assertExactJson([$image2->id]); + $response->assertStatus(200); + + $pattern = rawurlencode("%2F.jpg"); + $response = $this->json('GET', "/api/v1/volumes/{$vid}/files/filter/filename/$pattern") + ->assertExactJson([$image3->id]); + $response->assertStatus(200); } public function testIndexVideo()