diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/user.ex | 26 | ||||
| -rw-r--r-- | lib/pleroma/user/info.ex | 1 | ||||
| -rw-r--r-- | lib/pleroma/web/activity_pub/activity_pub.ex | 36 | ||||
| -rw-r--r-- | lib/pleroma/web/twitter_api/twitter_api_controller.ex | 1 | ||||
| -rw-r--r-- | lib/pleroma/web/twitter_api/views/user_view.ex | 9 | 
5 files changed, 29 insertions, 44 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index d58274508..0d2b838db 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -621,32 +621,6 @@ defmodule Pleroma.User do      )    end -  def update_follow_request_count(%User{} = user) do -    subquery = -      user -      |> User.get_follow_requests_query() -      |> select([a], %{count: count(a.id)}) - -    User -    |> where(id: ^user.id) -    |> join(:inner, [u], s in subquery(subquery)) -    |> update([u, s], -      set: [ -        info: -          fragment( -            "jsonb_set(?, '{follow_request_count}', ?::varchar::jsonb, true)", -            u.info, -            s.count -          ) -      ] -    ) -    |> Repo.update_all([], returning: true) -    |> case do -      {1, [user]} -> {:ok, user} -      _ -> {:error, user} -    end -  end -    def get_follow_requests(%User{} = user) do      q = get_follow_requests_query(user)      reqs = Repo.all(q) diff --git a/lib/pleroma/user/info.ex b/lib/pleroma/user/info.ex index 00a0f6df3..818b64645 100644 --- a/lib/pleroma/user/info.ex +++ b/lib/pleroma/user/info.ex @@ -12,7 +12,6 @@ defmodule Pleroma.User.Info do      field(:source_data, :map, default: %{})      field(:note_count, :integer, default: 0)      field(:follower_count, :integer, default: 0) -    field(:follow_request_count, :integer, default: 0)      field(:locked, :boolean, default: false)      field(:confirmation_pending, :boolean, default: false)      field(:confirmation_token, :string, default: nil) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 4e2056e20..783491b67 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -183,8 +183,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do      with data <- %{"to" => to, "type" => "Accept", "actor" => actor.ap_id, "object" => object},           {:ok, activity} <- insert(data, local), -         :ok <- maybe_federate(activity), -         _ <- User.update_follow_request_count(actor) do +         :ok <- maybe_federate(activity) do        {:ok, activity}      end    end @@ -195,8 +194,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do      with data <- %{"to" => to, "type" => "Reject", "actor" => actor.ap_id, "object" => object},           {:ok, activity} <- insert(data, local), -         :ok <- maybe_federate(activity), -         _ <- User.update_follow_request_count(actor) do +         :ok <- maybe_federate(activity) do        {:ok, activity}      end    end @@ -294,8 +292,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do    def follow(follower, followed, activity_id \\ nil, local \\ true) do      with data <- make_follow_data(follower, followed, activity_id),           {:ok, activity} <- insert(data, local), -         :ok <- maybe_federate(activity), -         _ <- User.update_follow_request_count(followed) do +         :ok <- maybe_federate(activity) do        {:ok, activity}      end    end @@ -305,8 +302,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do           {:ok, follow_activity} <- update_follow_state(follow_activity, "cancelled"),           unfollow_data <- make_unfollow_data(follower, followed, follow_activity, activity_id),           {:ok, activity} <- insert(unfollow_data, local), -         :ok <- maybe_federate(activity), -         _ <- User.update_follow_request_count(followed) do +         :ok <- maybe_federate(activity) do        {:ok, activity}      end    end @@ -429,6 +425,30 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do    @valid_visibilities ~w[direct unlisted public private]    defp restrict_visibility(query, %{visibility: visibility}) +       when is_list(visibility) do +    if Enum.all?(visibility, &(&1 in @valid_visibilities)) do +      query = +        from( +          a in query, +          where: +            fragment( +              "activity_visibility(?, ?, ?) = ANY (?)", +              a.actor, +              a.recipients, +              a.data, +              ^visibility +            ) +        ) + +      Ecto.Adapters.SQL.to_sql(:all, Repo, query) + +      query +    else +      Logger.error("Could not restrict visibility to #{visibility}") +    end +  end + +  defp restrict_visibility(query, %{visibility: visibility})         when visibility in @valid_visibilities do      query =        from( diff --git a/lib/pleroma/web/twitter_api/twitter_api_controller.ex b/lib/pleroma/web/twitter_api/twitter_api_controller.ex index 0d74c30c3..41e3acc60 100644 --- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex +++ b/lib/pleroma/web/twitter_api/twitter_api_controller.ex @@ -167,6 +167,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do        params        |> Map.put("type", ["Create", "Announce", "Follow", "Like"])        |> Map.put("blocking_user", user) +      |> Map.put(:visibility, ~w[unlisted public private])      activities = ActivityPub.fetch_activities([user.ap_id], params) diff --git a/lib/pleroma/web/twitter_api/views/user_view.ex b/lib/pleroma/web/twitter_api/views/user_view.ex index 22f33e0b5..e72ce977c 100644 --- a/lib/pleroma/web/twitter_api/views/user_view.ex +++ b/lib/pleroma/web/twitter_api/views/user_view.ex @@ -133,7 +133,6 @@ defmodule Pleroma.Web.TwitterAPI.UserView do            "tags" => user.tags          }          |> maybe_with_activation_status(user, for_user) -        |> maybe_with_follow_request_count(user, for_user)      }      data = @@ -155,14 +154,6 @@ defmodule Pleroma.Web.TwitterAPI.UserView do    defp maybe_with_activation_status(data, _, _), do: data -  defp maybe_with_follow_request_count(data, %User{id: id, info: %{locked: true}} = user, %User{ -         id: id -       }) do -    Map.put(data, "follow_request_count", user.info.follow_request_count) -  end - -  defp maybe_with_follow_request_count(data, _, _), do: data -    defp maybe_with_role(data, %User{id: id} = user, %User{id: id}) do      Map.merge(data, %{"role" => role(user), "show_role" => user.info.show_role})    end  | 
