diff --git a/fixtures/path_gateway_unixfs/README.md b/fixtures/path_gateway_unixfs/README.md index 6f13750a7..9fa94a574 100644 --- a/fixtures/path_gateway_unixfs/README.md +++ b/fixtures/path_gateway_unixfs/README.md @@ -39,3 +39,16 @@ ipfs files ls -l # Manually CID of "dir-with-files" and then... ipfs dag export $CID ``` + +### [dir-with-percent-encoded-filename.car](./dir-with-percent-encoded-name-file.car) + +```sh +ipfs version +# ipfs version 0.22.0 +CID=$(echo "hello from a percent encoded filename" | ipfs add --cid-version=1 -q) +ipfs files mkdir -p --cid-version 1 /dir-with-percent-encoded-filename +ipfs files cp /ipfs/$CID "/dir-with-percent-encoded-filename/Portugal%2C+España=Peninsula Ibérica.txt" +ipfs files ls -l +# Manually CID of "dir-with-percent-encoded-filename" and then... +ipfs dag export $CID +``` \ No newline at end of file diff --git a/fixtures/path_gateway_unixfs/dir-with-percent-encoded-filename.car b/fixtures/path_gateway_unixfs/dir-with-percent-encoded-filename.car new file mode 100644 index 000000000..559f4d338 Binary files /dev/null and b/fixtures/path_gateway_unixfs/dir-with-percent-encoded-filename.car differ diff --git a/tests/path_gateway_unixfs_test.go b/tests/path_gateway_unixfs_test.go index ae3705d82..1af34c203 100644 --- a/tests/path_gateway_unixfs_test.go +++ b/tests/path_gateway_unixfs_test.go @@ -577,3 +577,20 @@ func TestGatewayUnixFSFileRanges(t *testing.T) { RunWithSpecs(t, tests, specs.PathGatewayUnixFS) } + +func TestPathGatewayMiscellaneous(t *testing.T) { + fixture := car.MustOpenUnixfsCar("path_gateway_unixfs/dir-with-percent-encoded-filename.car") + rootDirCID := fixture.MustGetCid() + + tests := SugarTests{ + { + Name: "GET for /ipfs/ file whose filename contains percentage-encoded characters works", + Request: Request(). + Path("/ipfs/{{CID}}/Portugal%252C+España=Peninsula%20Ibérica.txt", rootDirCID), + Response: Expect(). + Body(fixture.MustGetRawData("Portugal%2C+España=Peninsula Ibérica.txt")), + }, + } + + RunWithSpecs(t, tests, specs.PathGatewayUnixFS) +} diff --git a/tests/subdomain_gateway_ipfs_test.go b/tests/subdomain_gateway_ipfs_test.go index 8fd11a682..c3304566a 100644 --- a/tests/subdomain_gateway_ipfs_test.go +++ b/tests/subdomain_gateway_ipfs_test.go @@ -120,6 +120,9 @@ func TestGatewaySubdomains(t *testing.T) { CIDv1_TOO_LONG := fixture.MustGetCid("hello-CIDv1_TOO_LONG") CIDWikipedia := "QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco" + dirWithPercentEncodedFilename := car.MustOpenUnixfsCar("path_gateway_unixfs/dir-with-percent-encoded-filename.car") + dirWithPercentEncodedFilenameCID := dirWithPercentEncodedFilename.MustGetCid() + tests := SugarTests{} // We're going to run the same test against multiple gateways (localhost, and a subdomain gateway) @@ -150,6 +153,15 @@ func TestGatewaySubdomains(t *testing.T) { Contains("{{scheme}}://{{cid}}.ipfs.{{host}}/", u.Scheme, CIDv1, u.Host), ), }, + { + Name: "request for example.com/ipfs/{CIDv1}/{filename with percent encoding} redirects to subdomain", + Request: Request().URL("{{url}}/ipfs/{{cid}}/Portugal%252C+España=Peninsula%20Ibérica.txt", gatewayURL, dirWithPercentEncodedFilenameCID), + Response: Expect(). + Status(301). + Headers( + Header("Location").Equals("{{scheme}}://{{cid}}.ipfs.{{host}}/Portugal%252C+Espa%C3%B1a=Peninsula%20Ib%C3%A9rica.txt", u.Scheme, dirWithPercentEncodedFilenameCID, u.Host), + ), + }, { Name: "request for example.com/ipfs/{DirCID} redirects to subdomain", Hint: `