diff options
| -rw-r--r-- | config/config.exs | 6 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/mastodon_api_controller.ex | 36 | ||||
| -rw-r--r-- | lib/pleroma/web/nodeinfo/nodeinfo_controller.ex | 8 | ||||
| -rw-r--r-- | lib/pleroma/web/router.ex | 2 | 
4 files changed, 51 insertions, 1 deletions
| diff --git a/config/config.exs b/config/config.exs index 922acea4b..614a3e1fe 100644 --- a/config/config.exs +++ b/config/config.exs @@ -109,6 +109,12 @@ config :pleroma, :gopher,    ip: {0, 0, 0, 0},    port: 9999 +config :pleroma, :suggestions, +  enabled: false, +  third_party_engine: +    "http://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-suggestions-api.cgi?{{host}}+{{user}}", +  timeout: 300_000 +  # Import environment specific config. This must remain at the bottom  # of this file so it overrides the configuration defined above.  import_config "#{Mix.env()}.exs" diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index 956787d5a..cd9525252 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -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 @@ -1097,4 +1099,38 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do      |> put_status(500)      |> json("Something went wrong")    end + +  @suggestions Application.get_env(:pleroma, :suggestions) + +  def suggestions(%{assigns: %{user: user}} = conn, _) do +    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 +      json(conn, []) +    end +  end  end diff --git a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex index 7c67bbf1c..f9a6d9c25 100644 --- a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex +++ b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex @@ -21,6 +21,7 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do    def nodeinfo(conn, %{"version" => "2.0"}) do      instance = Application.get_env(:pleroma, :instance)      media_proxy = Application.get_env(:pleroma, :media_proxy) +    suggestions = Application.get_env(:pleroma, :suggestions)      stats = Stats.get_stats()      response = %{ @@ -45,7 +46,12 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do          nodeName: Keyword.get(instance, :name),          nodeDescription: Keyword.get(instance, :description),          mediaProxy: Keyword.get(media_proxy, :enabled), -        private: !Keyword.get(instance, :public, true) +        private: !Keyword.get(instance, :public, true), +        suggestions: %{ +          enabled: Keyword.get(suggestions, :enabled, false), +          thirdPartyEngine: Keyword.get(suggestions, :third_party_engine, ""), +          timeout: Keyword.get(suggestions, :timeout, 5000) +        }        }      } diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index fc7a947aa..19f47dceb 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -141,6 +141,8 @@ defmodule Pleroma.Web.Router do      get("/domain_blocks", MastodonAPIController, :domain_blocks)      post("/domain_blocks", MastodonAPIController, :block_domain)      delete("/domain_blocks", MastodonAPIController, :unblock_domain) + +    get("/suggestions", MastodonAPIController, :suggestions)    end    scope "/api/web", Pleroma.Web.MastodonAPI do | 
