pack routes change
authorAlexander Strizhakov <alex.strizhakov@gmail.com>
Sun, 20 Sep 2020 06:51:36 +0000 (09:51 +0300)
committerAlexander Strizhakov <alex.strizhakov@gmail.com>
Thu, 24 Sep 2020 06:16:14 +0000 (09:16 +0300)
docs/API/pleroma_api.md
lib/pleroma/emoji/pack.ex
lib/pleroma/web/router.ex
test/web/pleroma_api/controllers/emoji_pack_controller_test.exs

index 3508496873805ecea039f82a6da2daa0143f4f5f..96fd4da73cf6802f5fab05660cbe5c2274f88bbf 100644 (file)
@@ -378,54 +378,41 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa
 * Params: None
 * Response: JSON, returns a list of Mastodon Conversation entities that were marked as read (200 - healthy, 503 unhealthy).
 
-## `GET /api/pleroma/emoji/packs/import`
-
-### Imports packs from filesystem
-
-* Method `GET`
-* Authentication: required
-* Params: None
-* Response: JSON, returns a list of imported packs.
-
-## `GET /api/pleroma/emoji/packs/remote`
+## `GET /api/pleroma/emoji/pack?name=:name`
 
-### Make request to another instance for packs list
+### Get pack.json for the pack
 
 * Method `GET`
-* Authentication: required
+* Authentication: not required
 * Params:
-  * `url`: url of the instance to get packs from
-* Response: JSON with the pack list, hashmap with pack name and pack contents
-
-## `POST /api/pleroma/emoji/packs/download`
-
-### Download pack from another instance
+  * `page`: page number for files (default 1)
+  * `page_size`: page size for files (default 30)
+* Response: JSON, pack json with `files`, `files_count` and `pack` keys with 200 status or 404 if the pack does not exist.
 
-* Method `POST`
-* Authentication: required
-* Params:
-  * `url`: url of the instance to download from
-  * `name`: pack to download from that instance
-  * `as`: (*optional*) name how to save pack
-* Response: JSON, "ok" with 200 status if the pack was downloaded, or 500 if there were
-  errors downloading the pack
+```json
+{
+  "files": {...},
+  "files_count": 0, // emoji count in pack
+  "pack": {...}
+}
+```
 
-## `POST /api/pleroma/emoji/packs/create?name=:name`
+## `POST /api/pleroma/emoji/pack?name=:name`
 
 ### Creates an empty pack
 
 * Method `POST`
-* Authentication: required
+* Authentication: required (admin)
 * Params:
   * `name`: pack name
 * Response: JSON, "ok" and 200 status or 409 if the pack with that name already exists
 
-## `PATCH /api/pleroma/emoji/packs/update?name=:name`
+## `PATCH /api/pleroma/emoji/pack?name=:name`
 
 ### Updates (replaces) pack metadata
 
 * Method `PATCH`
-* Authentication: required
+* Authentication: required (admin)
 * Params:
   * `name`: pack name
   * `metadata`: metadata to replace the old one
@@ -438,22 +425,54 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa
 * Response: JSON, updated "metadata" section of the pack and 200 status or 400 if there was a
   problem with the new metadata (the error is specified in the "error" part of the response JSON)
 
-## `DELETE /api/pleroma/emoji/packs/delete?name=:name`
+## `DELETE /api/pleroma/emoji/pack?name=:name`
 
 ### Delete a custom emoji pack
 
 * Method `DELETE`
-* Authentication: required
+* Authentication: required (admin)
 * Params:
   * `name`: pack name
 * Response: JSON, "ok" and 200 status or 500 if there was an error deleting the pack
 
+## `GET /api/pleroma/emoji/packs/import`
+
+### Imports packs from filesystem
+
+* Method `GET`
+* Authentication: required (admin)
+* Params: None
+* Response: JSON, returns a list of imported packs.
+
+## `GET /api/pleroma/emoji/packs/remote`
+
+### Make request to another instance for packs list
+
+* Method `GET`
+* Authentication: required (admin)
+* Params:
+  * `url`: url of the instance to get packs from
+* Response: JSON with the pack list, hashmap with pack name and pack contents
+
+## `POST /api/pleroma/emoji/packs/download`
+
+### Download pack from another instance
+
+* Method `POST`
+* Authentication: required (admin)
+* Params:
+  * `url`: url of the instance to download from
+  * `name`: pack to download from that instance
+  * `as`: (*optional*) name how to save pack
+* Response: JSON, "ok" with 200 status if the pack was downloaded, or 500 if there were
+  errors downloading the pack
+
 ## `POST /api/pleroma/emoji/packs/files?name=:name`
 
 ### Add new file to the pack
 
 * Method `POST`
-* Authentication: required
+* Authentication: required (admin)
 * Params:
   * `name`: pack name
   * `file`: file needs to be uploaded with the multipart request or link to remote file.
@@ -466,7 +485,7 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa
 ### Update emoji file from pack
 
 * Method `PATCH`
-* Authentication: required
+* Authentication: required (admin)
 * Params:
   * `name`: pack name
   * `shortcode`: emoji file shortcode
@@ -480,7 +499,7 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa
 ### Delete emoji file from pack
 
 * Method `DELETE`
-* Authentication: required
+* Authentication: required (admin)
 * Params:
   * `name`: pack name
   * `shortcode`: emoji file shortcode
@@ -507,25 +526,6 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa
 }
 ```
 
-## `GET /api/pleroma/emoji/packs/show?name=:name`
-
-### Get pack.json for the pack
-
-* Method `GET`
-* Authentication: not required
-* Params:
-  * `page`: page number for files (default 1)
-  * `page_size`: page size for files (default 30)
-* Response: JSON, pack json with `files`, `files_count` and `pack` keys with 200 status or 404 if the pack does not exist.
-
-```json
-{
-  "files": {...},
-  "files_count": 0, // emoji count in pack
-  "pack": {...}
-}
-```
-
 ## `GET /api/pleroma/emoji/packs/archive?name=:name`
 
 ### Requests a local pack archive from the instance
index 4420eff5aa19c7b148afff906c0b454e58a434d7..8f1989ada53a41346e1fd76a72b3828739737643 100644 (file)
@@ -245,7 +245,7 @@ defmodule Pleroma.Emoji.Pack do
 
     with :ok <- validate_shareable_packs_available(uri),
          {:ok, remote_pack} <-
-           uri |> URI.merge("/api/pleroma/emoji/packs/show?name=#{name}") |> http_get(),
+           uri |> URI.merge("/api/pleroma/emoji/pack?name=#{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),
@@ -524,7 +524,7 @@ defmodule Pleroma.Emoji.Pack do
   defp http_get(%URI{} = url), do: url |> to_string() |> http_get()
 
   defp http_get(url) do
-    with {:ok, %{body: body}} <- url |> Pleroma.HTTP.get() do
+    with {:ok, %{body: body}} <- Pleroma.HTTP.get(url, [], pool: :default) do
       Jason.decode(body)
     end
   end
index 6f591b12f5bf1a56de73477744e2fe8315012a62..707d5e1c4ec552a2c1a7e4e024ed8e17afbea150 100644 (file)
@@ -226,6 +226,20 @@ defmodule Pleroma.Web.Router do
   end
 
   scope "/api/pleroma/emoji", Pleroma.Web.PleromaAPI do
+    scope "/pack" do
+      pipe_through(:admin_api)
+
+      post("/", EmojiPackController, :create)
+      patch("/", EmojiPackController, :update)
+      delete("/", EmojiPackController, :delete)
+    end
+
+    scope "/pack" do
+      pipe_through(:api)
+
+      get("/", EmojiPackController, :show)
+    end
+
     # Modifying packs
     scope "/packs" do
       pipe_through(:admin_api)
@@ -246,8 +260,8 @@ defmodule Pleroma.Web.Router do
     # Pack info / downloading
     scope "/packs" do
       pipe_through(:api)
+
       get("/", EmojiPackController, :index)
-      get("/show", EmojiPackController, :show)
       get("/archive", EmojiPackController, :archive)
     end
   end
index 95fd78c7e1e75f60b86b55fbca6428167a5f78ff..386ad8634e40ad88af15a3f5d220d66baa4fab5b 100644 (file)
@@ -183,10 +183,10 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
 
         %{
           method: :get,
-          url: "https://example.com/api/pleroma/emoji/packs/show?name=test_pack"
+          url: "https://example.com/api/pleroma/emoji/pack?name=test_pack"
         } ->
           conn
-          |> get("/api/pleroma/emoji/packs/show?name=test_pack")
+          |> get("/api/pleroma/emoji/pack?name=test_pack")
           |> json_response_and_validate_schema(200)
           |> json()
 
@@ -201,10 +201,10 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
 
         %{
           method: :get,
-          url: "https://example.com/api/pleroma/emoji/packs/show?name=test_pack_nonshared"
+          url: "https://example.com/api/pleroma/emoji/pack?name=test_pack_nonshared"
         } ->
           conn
-          |> get("/api/pleroma/emoji/packs/show?name=test_pack_nonshared")
+          |> get("/api/pleroma/emoji/pack?name=test_pack_nonshared")
           |> json_response_and_validate_schema(200)
           |> json()
 
@@ -228,7 +228,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
       assert File.exists?("#{@emoji_path}/test_pack2/blank.png")
 
       assert admin_conn
-             |> delete("/api/pleroma/emoji/packs/delete?name=test_pack2")
+             |> delete("/api/pleroma/emoji/pack?name=test_pack2")
              |> json_response_and_validate_schema(200) == "ok"
 
       refute File.exists?("#{@emoji_path}/test_pack2")
@@ -249,7 +249,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
       assert File.exists?("#{@emoji_path}/test_pack_nonshared2/blank.png")
 
       assert admin_conn
-             |> delete("/api/pleroma/emoji/packs/delete?name=test_pack_nonshared2")
+             |> delete("/api/pleroma/emoji/pack?name=test_pack_nonshared2")
              |> json_response_and_validate_schema(200) == "ok"
 
       refute File.exists?("#{@emoji_path}/test_pack_nonshared2")
@@ -289,7 +289,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
 
         %{
           method: :get,
-          url: "https://example.com/api/pleroma/emoji/packs/show?name=pack_bad_sha"
+          url: "https://example.com/api/pleroma/emoji/pack?name=pack_bad_sha"
         } ->
           {:ok, pack} = Pleroma.Emoji.Pack.load_pack("pack_bad_sha")
           %Tesla.Env{status: 200, body: Jason.encode!(pack)}
@@ -326,7 +326,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
 
         %{
           method: :get,
-          url: "https://example.com/api/pleroma/emoji/packs/show?name=test_pack"
+          url: "https://example.com/api/pleroma/emoji/pack?name=test_pack"
         } ->
           {:ok, pack} = Pleroma.Emoji.Pack.load_pack("test_pack")
           %Tesla.Env{status: 200, body: Jason.encode!(pack)}
@@ -346,7 +346,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
     end
   end
 
-  describe "PATCH /api/pleroma/emoji/packs/update?name=:name" do
+  describe "PATCH /api/pleroma/emoji/pack?name=:name" do
     setup do
       pack_file = "#{@emoji_path}/test_pack/pack.json"
       original_content = File.read!(pack_file)
@@ -368,7 +368,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
     test "for a pack without a fallback source", ctx do
       assert ctx[:admin_conn]
              |> put_req_header("content-type", "multipart/form-data")
-             |> patch("/api/pleroma/emoji/packs/update?name=test_pack", %{
+             |> patch("/api/pleroma/emoji/pack?name=test_pack", %{
                "metadata" => ctx[:new_data]
              })
              |> json_response_and_validate_schema(200) == ctx[:new_data]
@@ -396,7 +396,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
 
       assert ctx[:admin_conn]
              |> put_req_header("content-type", "multipart/form-data")
-             |> patch("/api/pleroma/emoji/packs/update?name=test_pack", %{metadata: new_data})
+             |> patch("/api/pleroma/emoji/pack?name=test_pack", %{metadata: new_data})
              |> json_response_and_validate_schema(200) == new_data_with_sha
 
       assert Jason.decode!(File.read!(ctx[:pack_file]))["pack"] == new_data_with_sha
@@ -416,17 +416,17 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
 
       assert ctx[:admin_conn]
              |> put_req_header("content-type", "multipart/form-data")
-             |> patch("/api/pleroma/emoji/packs/update?name=test_pack", %{metadata: new_data})
+             |> patch("/api/pleroma/emoji/pack?name=test_pack", %{metadata: new_data})
              |> json_response_and_validate_schema(:bad_request) == %{
                "error" => "The fallback archive does not have all files specified in pack.json"
              }
     end
   end
 
-  describe "POST/DELETE /api/pleroma/emoji/packs/?name=:name" do
+  describe "POST/DELETE /api/pleroma/emoji/pack?name=:name" do
     test "creating and deleting a pack", %{admin_conn: admin_conn} do
       assert admin_conn
-             |> post("/api/pleroma/emoji/packs/create?name=test_created")
+             |> post("/api/pleroma/emoji/pack?name=test_created")
              |> json_response_and_validate_schema(200) == "ok"
 
       assert File.exists?("#{@emoji_path}/test_created/pack.json")
@@ -438,7 +438,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
              }
 
       assert admin_conn
-             |> delete("/api/pleroma/emoji/packs/delete?name=test_created")
+             |> delete("/api/pleroma/emoji/pack?name=test_created")
              |> json_response_and_validate_schema(200) == "ok"
 
       refute File.exists?("#{@emoji_path}/test_created/pack.json")
@@ -451,7 +451,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
       File.write!(Path.join(path, "pack.json"), pack_file)
 
       assert admin_conn
-             |> post("/api/pleroma/emoji/packs/create?name=test_created")
+             |> post("/api/pleroma/emoji/pack?name=test_created")
              |> json_response_and_validate_schema(:conflict) == %{
                "error" => "A pack named \"test_created\" already exists"
              }
@@ -461,7 +461,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
 
     test "with empty name", %{admin_conn: admin_conn} do
       assert admin_conn
-             |> post("/api/pleroma/emoji/packs/create?name= ")
+             |> post("/api/pleroma/emoji/pack?name= ")
              |> json_response_and_validate_schema(:bad_request) == %{
                "error" => "pack name cannot be empty"
              }
@@ -470,7 +470,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
 
   test "deleting nonexisting pack", %{admin_conn: admin_conn} do
     assert admin_conn
-           |> delete("/api/pleroma/emoji/packs/delete?name=non_existing")
+           |> delete("/api/pleroma/emoji/pack?name=non_existing")
            |> json_response_and_validate_schema(:not_found) == %{
              "error" => "Pack non_existing does not exist"
            }
@@ -478,7 +478,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
 
   test "deleting with empty name", %{admin_conn: admin_conn} do
     assert admin_conn
-           |> delete("/api/pleroma/emoji/packs/delete?name= ")
+           |> delete("/api/pleroma/emoji/pack?name= ")
            |> json_response_and_validate_schema(:bad_request) == %{
              "error" => "pack name cannot be empty"
            }
@@ -526,7 +526,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
            }
   end
 
-  describe "GET /api/pleroma/emoji/packs/:name" do
+  describe "GET /api/pleroma/emoji/pack?name=:name" do
     test "shows pack.json", %{conn: conn} do
       assert %{
                "files" => files,
@@ -541,7 +541,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
                }
              } =
                conn
-               |> get("/api/pleroma/emoji/packs/show?name=test_pack")
+               |> get("/api/pleroma/emoji/pack?name=test_pack")
                |> json_response_and_validate_schema(200)
 
       assert files == %{"blank" => "blank.png", "blank2" => "blank2.png"}
@@ -551,7 +551,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
                "files_count" => 2
              } =
                conn
-               |> get("/api/pleroma/emoji/packs/show?name=test_pack&page_size=1")
+               |> get("/api/pleroma/emoji/pack?name=test_pack&page_size=1")
                |> json_response_and_validate_schema(200)
 
       assert files |> Map.keys() |> length() == 1
@@ -561,7 +561,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
                "files_count" => 2
              } =
                conn
-               |> get("/api/pleroma/emoji/packs/show?name=test_pack&page_size=1&page=2")
+               |> get("/api/pleroma/emoji/pack?name=test_pack&page_size=1&page=2")
                |> json_response_and_validate_schema(200)
 
       assert files |> Map.keys() |> length() == 1
@@ -581,13 +581,13 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
                }
              } =
                conn
-               |> get("/api/pleroma/emoji/packs/show?name=blobs.gg")
+               |> get("/api/pleroma/emoji/pack?name=blobs.gg")
                |> json_response_and_validate_schema(200)
     end
 
     test "non existing pack", %{conn: conn} do
       assert conn
-             |> get("/api/pleroma/emoji/packs/show?name=non_existing")
+             |> get("/api/pleroma/emoji/pack?name=non_existing")
              |> json_response_and_validate_schema(:not_found) == %{
                "error" => "Pack non_existing does not exist"
              }
@@ -595,7 +595,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
 
     test "error name", %{conn: conn} do
       assert conn
-             |> get("/api/pleroma/emoji/packs/show?name= ")
+             |> get("/api/pleroma/emoji/pack?name= ")
              |> json_response_and_validate_schema(:bad_request) == %{
                "error" => "pack name cannot be empty"
              }