Return the file content for `GET /api/pleroma/admin/instance_document/:document_name`
authoreugenijm <eugenijm@protonmail.com>
Thu, 17 Sep 2020 13:54:38 +0000 (16:54 +0300)
committereugenijm <eugenijm@protonmail.com>
Thu, 17 Sep 2020 13:55:53 +0000 (16:55 +0300)
docs/API/admin_api.md
lib/pleroma/web/admin_api/controllers/instance_document_controller.ex
lib/pleroma/web/api_spec/operations/admin/instance_document_operation.ex
lib/pleroma/web/instance_document.ex
test/web/admin_api/controllers/instance_document_controller_test.exs

index eba92dd1fbdbfadd9ba35c1fe470fbe1e86fdd39..7992db58f055246f561dfdda2ede5e52889774f6 100644 (file)
@@ -1458,23 +1458,23 @@ Loads json generated from `config/descriptions.exs`.
 
 ## `GET /api/pleroma/admin/instance_document/:document_name`
 
-### Gets an instance document
+### Get an instance document
 
 - Authentication: required
 
 - Response:
 
-``` json
-{
-  "url": "https://example.com/instance/panel.html"
-}
+Returns the content of the document
+
+```html
+<h1>Instance panel</h1>
 ```
 
 ## `PATCH /api/pleroma/admin/instance_document/:document_name`
 - Params:
   - `file` (the file to be uploaded, using multipart form data.)
 
-### Updates an instance document
+### Update an instance document
 
 - Authentication: required
 
index 2144e44accb591ae075ed729045c3ed6d6ca397d..504d9b5171e1cebbb50ce245605c2224f45f83b8 100644 (file)
@@ -5,6 +5,7 @@
 defmodule Pleroma.Web.AdminAPI.InstanceDocumentController do
   use Pleroma.Web, :controller
 
+  alias Pleroma.Plugs.InstanceStatic
   alias Pleroma.Plugs.OAuthScopesPlug
   alias Pleroma.Web.InstanceDocument
 
@@ -18,8 +19,11 @@ defmodule Pleroma.Web.AdminAPI.InstanceDocumentController do
   plug(OAuthScopesPlug, %{scopes: ["write"], admin: true} when action in [:update, :delete])
 
   def show(conn, %{name: document_name}) do
-    with {:ok, url} <- InstanceDocument.get(document_name) do
-      json(conn, %{"url" => url})
+    with {:ok, url} <- InstanceDocument.get(document_name),
+         {:ok, content} <- File.read(InstanceStatic.file_path(url)) do
+      conn
+      |> put_resp_content_type("text/html")
+      |> send_resp(200, content)
     end
   end
 
index e0eb993fb287370a6b0cc4707e452433e591840c..a120ff4e84b3ec775e5f6467985a764b9ca131f1 100644 (file)
@@ -26,7 +26,7 @@ defmodule Pleroma.Web.ApiSpec.Admin.InstanceDocumentOperation do
         | Helpers.admin_api_params()
       ],
       responses: %{
-        200 => Operation.response("InstanceDocument", "application/json", instance_document()),
+        200 => document_content(),
         400 => Operation.response("Bad Request", "application/json", ApiError),
         403 => Operation.response("Forbidden", "application/json", ApiError),
         404 => Operation.response("Not Found", "application/json", ApiError)
@@ -105,4 +105,11 @@ defmodule Pleroma.Web.ApiSpec.Admin.InstanceDocumentOperation do
       }
     }
   end
+
+  defp document_content do
+    Operation.response("InstanceDocumentContent", "text/html", %Schema{
+      type: :string,
+      example: "<h1>Instance panel</h1>"
+    })
+  end
 end
index 969a44e41b63ff71399fddf7d37bcf988fa2dfd3..df5caebf0add06bac71e5ab304245138132cce6d 100644 (file)
@@ -14,7 +14,7 @@ defmodule Pleroma.Web.InstanceDocument do
   @spec get(String.t()) :: {:ok, String.t()} | {:error, atom()}
   def get(document_name) do
     case Map.fetch(@instance_documents, document_name) do
-      {:ok, path} -> {:ok, Path.join(Endpoint.url(), path)}
+      {:ok, path} -> {:ok, path}
       _ -> {:error, :not_found}
     end
   end
index 60dcc9dffb87cafc5595e26182c8678ebe764015..5f7b042f665ddd5a3fab9f7a8fc5a8ec6df94784 100644 (file)
@@ -33,10 +33,8 @@ defmodule Pleroma.Web.AdminAPI.InstanceDocumentControllerTest do
     test "return the instance document url", %{conn: conn} do
       conn = get(conn, "/api/pleroma/admin/instance_document/instance-panel")
 
-      assert %{"url" => url} = json_response_and_validate_schema(conn, 200)
-      index = get(build_conn(), url)
-      response = html_response(index, 200)
-      assert String.contains?(response, @default_instance_panel)
+      assert content = html_response(conn, 200)
+      assert String.contains?(content, @default_instance_panel)
     end
 
     test "it returns 403 if requested by a non-admin" do
@@ -91,9 +89,7 @@ defmodule Pleroma.Web.AdminAPI.InstanceDocumentControllerTest do
         conn
         |> get("/api/pleroma/admin/instance_document/instance-panel")
 
-      assert %{"url" => url} = json_response_and_validate_schema(conn_resp, 200)
-      index = get(build_conn(), url)
-      assert html_response(index, 200) == "Custom instance panel"
+      assert html_response(conn_resp, 200) == "Custom instance panel"
 
       conn
       |> delete("/api/pleroma/admin/instance_document/instance-panel")
@@ -103,10 +99,8 @@ defmodule Pleroma.Web.AdminAPI.InstanceDocumentControllerTest do
         conn
         |> get("/api/pleroma/admin/instance_document/instance-panel")
 
-      assert %{"url" => url} = json_response_and_validate_schema(conn_resp, 200)
-      index = get(build_conn(), url)
-      response = html_response(index, 200)
-      assert String.contains?(response, @default_instance_panel)
+      assert content = html_response(conn_resp, 200)
+      assert String.contains?(content, @default_instance_panel)
     end
   end
 end