diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/web/activity_pub/relay.ex | 17 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/mastodon_api.ex | 24 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/mastodon_api_controller.ex | 44 | ||||
| -rw-r--r-- | lib/pleroma/web/web.ex | 4 | 
4 files changed, 48 insertions, 41 deletions
| diff --git a/lib/pleroma/web/activity_pub/relay.ex b/lib/pleroma/web/activity_pub/relay.ex index 1ebfcdd86..5f18cc64a 100644 --- a/lib/pleroma/web/activity_pub/relay.ex +++ b/lib/pleroma/web/activity_pub/relay.ex @@ -14,6 +14,7 @@ defmodule Pleroma.Web.ActivityPub.Relay do      |> User.get_or_create_service_actor_by_ap_id()    end +  @spec follow(String.t()) :: {:ok, Activity.t()} | {:error, any()}    def follow(target_instance) do      with %User{} = local_user <- get_actor(),           {:ok, %User{} = target_user} <- User.get_or_fetch_by_ap_id(target_instance), @@ -21,12 +22,17 @@ defmodule Pleroma.Web.ActivityPub.Relay do        Logger.info("relay: followed instance: #{target_instance}; id=#{activity.data["id"]}")        {:ok, activity}      else +      {:error, _} = error -> +        Logger.error("error: #{inspect(error)}") +        error +        e ->          Logger.error("error: #{inspect(e)}")          {:error, e}      end    end +  @spec unfollow(String.t()) :: {:ok, Activity.t()} | {:error, any()}    def unfollow(target_instance) do      with %User{} = local_user <- get_actor(),           {:ok, %User{} = target_user} <- User.get_or_fetch_by_ap_id(target_instance), @@ -34,20 +40,27 @@ defmodule Pleroma.Web.ActivityPub.Relay do        Logger.info("relay: unfollowed instance: #{target_instance}: id=#{activity.data["id"]}")        {:ok, activity}      else +      {:error, _} = error -> +        Logger.error("error: #{inspect(error)}") +        error +        e ->          Logger.error("error: #{inspect(e)}")          {:error, e}      end    end +  @spec publish(any()) :: {:ok, Activity.t(), Object.t()} | {:error, any()}    def publish(%Activity{data: %{"type" => "Create"}} = activity) do      with %User{} = user <- get_actor(),           %Object{} = object <- Object.normalize(activity) do        ActivityPub.announce(user, object, nil, true, false)      else -      e -> Logger.error("error: #{inspect(e)}") +      e -> +        Logger.error("error: #{inspect(e)}") +        {:error, inspect(e)}      end    end -  def publish(_), do: nil +  def publish(_), do: {:error, "Not implemented"}  end diff --git a/lib/pleroma/web/mastodon_api/mastodon_api.ex b/lib/pleroma/web/mastodon_api/mastodon_api.ex index 46944dcbc..ac01d1ff3 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api.ex @@ -13,10 +13,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do    alias Pleroma.User    alias Pleroma.Web.CommonAPI +  @spec follow(User.t(), User.t(), map) :: {:ok, User.t()} | {:error, String.t()}    def follow(follower, followed, params \\ %{}) do -    options = cast_params(params) -    reblogs = options[:reblogs] -      result =        if not User.following?(follower, followed) do          CommonAPI.follow(follower, followed) @@ -24,19 +22,25 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do          {:ok, follower, followed, nil}        end -    with {:ok, follower, followed, _} <- result do -      reblogs -      |> case do -        false -> CommonAPI.hide_reblogs(follower, followed) -        _ -> CommonAPI.show_reblogs(follower, followed) -      end -      |> case do +    with {:ok, follower, _followed, _} <- result do +      options = cast_params(params) + +      case reblogs_visibility(options[:reblogs], result) do          {:ok, follower} -> {:ok, follower}          _ -> {:ok, follower}        end      end    end +  defp reblogs_visibility(false, {:ok, follower, followed, _}) do +    CommonAPI.hide_reblogs(follower, followed) +  end + +  defp reblogs_visibility(_, {:ok, follower, followed, _}) do +    CommonAPI.show_reblogs(follower, followed) +  end + +  @spec get_followers(User.t(), map()) :: list(User.t())    def get_followers(user, params \\ %{}) do      user      |> User.get_followers_query() diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index 96e0d82aa..c3c75bd9a 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -537,8 +537,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do        |> put_view(StatusView)        |> try_render("poll.json", %{object: object, for: user})      else -      nil -> render_error(conn, :not_found, "Record not found") -      false -> render_error(conn, :not_found, "Record not found") +      error when is_nil(error) or error == false -> +        render_error(conn, :not_found, "Record not found")      end    end @@ -1693,45 +1693,35 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do          |> String.replace("{{user}}", user)        with {:ok, %{status: 200, body: body}} <- -             HTTP.get( -               url, -               [], -               adapter: [ -                 recv_timeout: timeout, -                 pool: :default -               ] -             ), +             HTTP.get(url, [], adapter: [recv_timeout: timeout, pool: :default]),             {:ok, data} <- Jason.decode(body) do          data =            data            |> Enum.slice(0, limit)            |> Enum.map(fn x -> -            Map.put( -              x, -              "id", -              case User.get_or_fetch(x["acct"]) do -                {:ok, %User{id: id}} -> id -                _ -> 0 -              end -            ) -          end) -          |> Enum.map(fn x -> -            Map.put(x, "avatar", MediaProxy.url(x["avatar"])) -          end) -          |> Enum.map(fn x -> -            Map.put(x, "avatar_static", MediaProxy.url(x["avatar_static"])) +            x +            |> Map.put("id", fetch_suggestion_id(x)) +            |> Map.put("avatar", MediaProxy.url(x["avatar"])) +            |> Map.put("avatar_static", MediaProxy.url(x["avatar_static"]))            end) -        conn -        |> json(data) +        json(conn, data)        else -        e -> Logger.error("Could not retrieve suggestions at fetch #{url}, #{inspect(e)}") +        e -> +          Logger.error("Could not retrieve suggestions at fetch #{url}, #{inspect(e)}")        end      else        json(conn, [])      end    end +  defp fetch_suggestion_id(attrs) do +    case User.get_or_fetch(attrs["acct"]) do +      {:ok, %User{id: id}} -> id +      _ -> 0 +    end +  end +    def status_card(%{assigns: %{user: user}} = conn, %{"id" => status_id}) do      with %Activity{} = activity <- Activity.get_by_id(status_id),           true <- Visibility.visible_for_user?(activity, user) do diff --git a/lib/pleroma/web/web.ex b/lib/pleroma/web/web.ex index b42f6887e..687346554 100644 --- a/lib/pleroma/web/web.ex +++ b/lib/pleroma/web/web.ex @@ -58,10 +58,10 @@ defmodule Pleroma.Web do        rescue          error ->            Logger.error( -            "#{__MODULE__} failed to render #{inspect({view, template})}: #{inspect(error)}" +            "#{__MODULE__} failed to render #{inspect({view, template})}\n" <> +              Exception.format(:error, error, __STACKTRACE__)            ) -          Logger.error(inspect(__STACKTRACE__))            nil        end | 
