configurable timeout
[akkoma] / lib / pleroma / web / mastodon_api / mastodon_api_controller.ex
index d87a6cb1909ee407033b3d5e90cc63200a1cace4..396f11a70f5b2914775450de2a6e35104145f310 100644 (file)
@@ -1076,20 +1076,34 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
   @suggestions Application.get_env(:pleroma, :suggestions)
 
   def suggestions(%{assigns: %{user: user}} = conn, _) do
-    host = String.replace Web.base_url(), "https://", ""
-    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: 300000, recv_timeout: 300000]),
-         {: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)
+    if Keyword.get(@suggestions, :enabled, false) do
+      api = Keyword.get(@suggestions, :third_party_engine, "")
+      timeout = Keyword.get(@suggestions, :timeout, 5000)
+
+      host =
+        Application.get_env(:pleroma, Pleroma.Web.Endpoint)
+        |> Keyword.get(:url)
+        |> Keyword.get(:host)
+
+      user = user.nickname
+      url = String.replace(api, "{{host}}", host) |> String.replace("{{user}}", user)
+
+      with {:ok, %{status_code: 200, body: body}} <-
+             @httpoison.get(url, [], timeout: timeout, recv_timeout: timeout),
+           {: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 retrieve suggestions at fetch #{url}, #{inspect(e)}")
+      end
     else
-      e -> Logger.error("Could not decode user at fetch #{url}, #{inspect(e)}")
+      json(conn, [])
     end
   end
 end