improve getting host name
[akkoma] / lib / pleroma / web / mastodon_api / mastodon_api_controller.ex
index 0184d52c8fdd4bbdccb5d7d8257789631bc0cfed..2f8139fe6d9fa78d82385ac9b9d5f057c3afc440 100644 (file)
@@ -11,6 +11,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
   import Ecto.Query
   require Logger
 
+  @httpoison Application.get_env(:pleroma, :httpoison)
+
   action_fallback(:errors)
 
   def create_app(conn, params) do
@@ -1071,8 +1073,31 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
     |> json("Something went wrong")
   end
 
-  def suggestions(conn, _) do
-    conn
-    |> json("SUGGESTIONS!")
+  @suggestions Application.get_env(:pleroma, :suggestions)
+
+  def suggestions(%{assigns: %{user: user}} = conn, _) do
+    host =
+      Application.get_env(:pleroma, Pleroma.Web.Endpoint)
+      |> Keyword.get(:url)
+      |> Keyword.get(:host)
+
+    user = user.nickname
+    api = Keyword.get(@suggestions, :third_party_engine, "")
+    url = String.replace(api, "{{host}}", host) |> String.replace("{{user}}", user)
+
+    with {:ok, %{status_code: 200, body: body}} <-
+           @httpoison.get(url, [], timeout: 300_000, recv_timeout: 300_000),
+         {:ok, data} <- Jason.decode(body) do
+      data2 =
+        Enum.slice(data, 0, 40)
+        |> Enum.map(fn x ->
+          Map.put(x, "id", User.get_or_fetch(x["acct"]).id)
+        end)
+
+      conn
+      |> json(data2)
+    else
+      e -> Logger.error("Could not decode user at fetch #{url}, #{inspect(e)}")
+    end
   end
 end