fix #246
Co-authored-by: Sol Fisher Romanoff <sol@solfisher.com>
Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/362
Co-authored-by: sfr <sol@solfisher.com>
Co-committed-by: sfr <sol@solfisher.com>
with :ok <- validate_shareable_packs_available(uri),
{:ok, remote_pack} <-
with :ok <- validate_shareable_packs_available(uri),
{:ok, remote_pack} <-
- uri |> URI.merge("/api/v1/pleroma/emoji/pack?name=#{name}") |> http_get(),
+ uri |> URI.merge("/api/v1/pleroma/emoji/pack?name=#{URI.encode(name)}") |> http_get(),
{:ok, %{sha: sha, url: url} = pack_info} <- fetch_pack_info(remote_pack, uri, name),
{:ok, archive} <- download_archive(url, sha),
pack <- copy_as(remote_pack, as || name),
{:ok, %{sha: sha, url: url} = pack_info} <- fetch_pack_info(remote_pack, uri, name),
{:ok, archive} <- download_archive(url, sha),
pack <- copy_as(remote_pack, as || name),
- url: URI.merge(uri, "/api/v1/pleroma/emoji/packs/archive?name=#{name}") |> to_string()
+ url:
+ URI.merge(uri, "/api/v1/pleroma/emoji/packs/archive?name=#{URI.encode(name)}")
+ |> to_string()
}}
%{"fallback-src" => src, "fallback-src-sha256" => sha} when is_binary(src) ->
}}
%{"fallback-src" => src, "fallback-src-sha256" => sha} when is_binary(src) ->
--- /dev/null
+{
+ "files": {
+ "blank": "blank.png",
+ "blank2": "blank2.png"
+ },
+ "pack": {
+ "description": "Test description",
+ "homepage": "https://pleroma.social",
+ "license": "Test license",
+ "share-files": true
+ }
+}
\ No newline at end of file
|> get("/api/v1/pleroma/emoji/packs")
|> json_response_and_validate_schema(200)
|> get("/api/v1/pleroma/emoji/packs")
|> json_response_and_validate_schema(200)
- assert resp["count"] == 4
+ assert resp["count"] == 5
assert resp["packs"]
|> Map.keys()
assert resp["packs"]
|> Map.keys()
shared = resp["packs"]["test_pack"]
assert shared["files"] == %{"blank" => "blank.png", "blank2" => "blank2.png"}
shared = resp["packs"]["test_pack"]
assert shared["files"] == %{"blank" => "blank.png", "blank2" => "blank2.png"}
|> get("/api/v1/pleroma/emoji/packs?page_size=1")
|> json_response_and_validate_schema(200)
|> get("/api/v1/pleroma/emoji/packs?page_size=1")
|> json_response_and_validate_schema(200)
- assert resp["count"] == 4
+ assert resp["count"] == 5
packs = Map.keys(resp["packs"])
packs = Map.keys(resp["packs"])
|> get("/api/v1/pleroma/emoji/packs?page_size=1&page=2")
|> json_response_and_validate_schema(200)
|> get("/api/v1/pleroma/emoji/packs?page_size=1&page=2")
|> json_response_and_validate_schema(200)
- assert resp["count"] == 4
+ assert resp["count"] == 5
packs = Map.keys(resp["packs"])
assert length(packs) == 1
[pack2] = packs
packs = Map.keys(resp["packs"])
assert length(packs) == 1
[pack2] = packs
|> get("/api/v1/pleroma/emoji/packs?page_size=1&page=3")
|> json_response_and_validate_schema(200)
|> get("/api/v1/pleroma/emoji/packs?page_size=1&page=3")
|> json_response_and_validate_schema(200)
- assert resp["count"] == 4
+ assert resp["count"] == 5
packs = Map.keys(resp["packs"])
assert length(packs) == 1
[pack3] = packs
packs = Map.keys(resp["packs"])
assert length(packs) == 1
[pack3] = packs
|> get("/api/v1/pleroma/emoji/packs?page_size=1&page=4")
|> json_response_and_validate_schema(200)
|> get("/api/v1/pleroma/emoji/packs?page_size=1&page=4")
|> json_response_and_validate_schema(200)
- assert resp["count"] == 4
+ assert resp["count"] == 5
packs = Map.keys(resp["packs"])
assert length(packs) == 1
[pack4] = packs
packs = Map.keys(resp["packs"])
assert length(packs) == 1
[pack4] = packs
url: "https://nonshared-pack"
} ->
text(File.read!("#{@emoji_path}/test_pack_nonshared/nonshared.zip"))
url: "https://nonshared-pack"
} ->
text(File.read!("#{@emoji_path}/test_pack_nonshared/nonshared.zip"))
+
+ %{
+ method: :get,
+ url: "https://example.com/api/v1/pleroma/emoji/pack?name=test%20with%20spaces"
+ } ->
+ conn
+ |> get("/api/v1/pleroma/emoji/pack?name=test%20with%20spaces")
+ |> json_response_and_validate_schema(200)
+ |> json()
+
+ %{
+ method: :get,
+ url: "https://example.com/api/v1/pleroma/emoji/packs/archive?name=test%20with%20spaces"
+ } ->
+ conn
+ |> get("/api/v1/pleroma/emoji/packs/archive?name=test%20with%20spaces")
+ |> response(200)
+ |> text()
|> json_response_and_validate_schema(200) == "ok"
refute File.exists?("#{@emoji_path}/test_pack_nonshared2")
|> json_response_and_validate_schema(200) == "ok"
refute File.exists?("#{@emoji_path}/test_pack_nonshared2")
+
+ assert admin_conn
+ |> put_req_header("content-type", "multipart/form-data")
+ |> post("/api/v1/pleroma/emoji/packs/download", %{
+ url: "https://example.com",
+ name: "test with spaces",
+ as: "test with spaces"
+ })
+ |> json_response_and_validate_schema(200) == "ok"
+
+ assert File.exists?("#{@emoji_path}/test with spaces/pack.json")
+ assert File.exists?("#{@emoji_path}/test with spaces/blank.png")
end
test "nonshareable instance", %{admin_conn: admin_conn} do
end
test "nonshareable instance", %{admin_conn: admin_conn} do