aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMaxim Filippov <colixer@gmail.com>2019-01-02 17:02:50 +0300
committerMaxim Filippov <colixer@gmail.com>2019-01-02 17:02:50 +0300
commit48e81d3d40d334bccb8438c61ab6b307ddb1392f (patch)
tree4b2ceee20618a52ebd277474973107cd53284d85 /lib
parent917d48d09bad573260bc816310ee2c75d4db84a8 (diff)
downloadpleroma-48e81d3d40d334bccb8438c61ab6b307ddb1392f.tar.gz
Add RichMediaController and tests
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/web/rich_media/controllers/rich_media_controller.ex17
-rw-r--r--lib/pleroma/web/rich_media/data.ex3
-rw-r--r--lib/pleroma/web/rich_media/parser.ex14
-rw-r--r--lib/pleroma/web/router.ex6
4 files changed, 36 insertions, 4 deletions
diff --git a/lib/pleroma/web/rich_media/controllers/rich_media_controller.ex b/lib/pleroma/web/rich_media/controllers/rich_media_controller.ex
new file mode 100644
index 000000000..91019961d
--- /dev/null
+++ b/lib/pleroma/web/rich_media/controllers/rich_media_controller.ex
@@ -0,0 +1,17 @@
+defmodule Pleroma.Web.RichMedia.RichMediaController do
+ use Pleroma.Web, :controller
+
+ import Pleroma.Web.ControllerHelper, only: [json_response: 3]
+
+ def parse(conn, %{"url" => url}) do
+ case Pleroma.Web.RichMedia.Parser.parse(url) do
+ {:ok, data} ->
+ conn
+ |> json_response(200, data)
+
+ {:error, msg} ->
+ conn
+ |> json_response(404, msg)
+ end
+ end
+end
diff --git a/lib/pleroma/web/rich_media/data.ex b/lib/pleroma/web/rich_media/data.ex
deleted file mode 100644
index 403d1d341..000000000
--- a/lib/pleroma/web/rich_media/data.ex
+++ /dev/null
@@ -1,3 +0,0 @@
-defmodule Pleroma.Web.RichMedia.Data do
- defstruct [:title, :type, :image, :url, :description]
-end
diff --git a/lib/pleroma/web/rich_media/parser.ex b/lib/pleroma/web/rich_media/parser.ex
index d9c1684d5..477a38196 100644
--- a/lib/pleroma/web/rich_media/parser.ex
+++ b/lib/pleroma/web/rich_media/parser.ex
@@ -4,11 +4,23 @@ defmodule Pleroma.Web.RichMedia.Parser do
def parse(url) do
{:ok, %Tesla.Env{body: html}} = Pleroma.HTTP.get(url)
- Enum.reduce_while(@parsers, %Pleroma.Web.RichMedia.Data{}, fn parser, acc ->
+ html |> maybe_parse() |> get_parsed_data()
+ end
+
+ defp maybe_parse(html) do
+ Enum.reduce_while(@parsers, %{}, fn parser, acc ->
case parser.parse(html, acc) do
{:ok, data} -> {:halt, data}
{:error, _msg} -> {:cont, acc}
end
end)
end
+
+ defp get_parsed_data(data) when data == %{} do
+ {:error, "No metadata found"}
+ end
+
+ defp get_parsed_data(data) do
+ {:ok, data}
+ end
end
diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex
index 1f929ee21..8df45bf4d 100644
--- a/lib/pleroma/web/router.ex
+++ b/lib/pleroma/web/router.ex
@@ -232,6 +232,12 @@ defmodule Pleroma.Web.Router do
put("/settings", MastodonAPIController, :put_settings)
end
+ scope "/api", Pleroma.Web.RichMedia do
+ pipe_through(:authenticated_api)
+
+ get("/rich_media/parse", RichMediaController, :parse)
+ end
+
scope "/api/v1", Pleroma.Web.MastodonAPI do
pipe_through(:api)
get("/instance", MastodonAPIController, :masto_instance)