add debug
authorsadposter <hannah+pleroma@coffee-and-dreams.uk>
Sun, 5 Dec 2021 21:56:11 +0000 (21:56 +0000)
committersadposter <hannah+pleroma@coffee-and-dreams.uk>
Sun, 5 Dec 2021 21:56:11 +0000 (21:56 +0000)
lib/mix/tasks/pleroma/activity.ex
lib/mix/tasks/pleroma/user.ex
lib/pleroma/web/activity_pub/activity_pub.ex

index b4ab2f7df8408ca0067e4db22db74d86365c6c66..512897a02cb27aaa8d62d58e55451ce1ce6af85b 100644 (file)
@@ -4,10 +4,13 @@
 
 defmodule Mix.Tasks.Pleroma.Activity do
   alias Pleroma.Activity
+  alias Pleroma.Activity.Search
+  alias Pleroma.User
+  alias Pleroma.Web.CommonAPI
+  alias Pleroma.Pagination
   require Logger
   import Mix.Pleroma
-  use Mix.Task
-
+  import Ecto.Query
   @shortdoc "A collection of activity debug tasks"
   @moduledoc """
    A collection of activity related tasks
@@ -21,4 +24,39 @@ defmodule Mix.Tasks.Pleroma.Activity do
     |> Activity.get_by_id()
     |> IO.inspect()
   end
+
+  def run(["delete_by_keyword", user, keyword | _rest]) do
+    start_pleroma()
+    u = User.get_by_nickname(user)
+    Activity
+      |> Activity.with_preloaded_object()
+      |> Activity.restrict_deactivated_users()
+      |> Activity.Queries.by_author(u)
+      |> query_with(keyword)
+      |> Pagination.fetch_paginated(
+        %{"offset" => 0, "limit" => 20, "skip_order" => false},
+        :offset
+      )
+      |> Enum.map(fn x -> CommonAPI.delete(x.id, u) end)
+      |> Enum.count
+      |> IO.puts
+  end
+
+  defp query_with(q, search_query) do
+    %{rows: [[tsc]]} =
+      Ecto.Adapters.SQL.query!(
+        Pleroma.Repo,
+        "select current_setting('default_text_search_config')::regconfig::oid;"
+      )
+
+    from([a, o] in q,
+      where:
+        fragment(
+          "to_tsvector(?::oid::regconfig, ?->>'content') @@ websearch_to_tsquery(?)",
+          ^tsc,
+          o.data,
+          ^search_query
+        )
+    )
+  end
 end
index 0252acc4ba8d8aea188e944f35fbd4b8f8b39a4e..deb88ede5b375de566ee62c959adfa0a1bdea324 100644 (file)
@@ -7,6 +7,7 @@ defmodule Mix.Tasks.Pleroma.User do
   import Mix.Pleroma
   alias Ecto.Changeset
   alias Pleroma.User
+  alias Pleroma.Web.ActivityPub.ActivityPub
   alias Pleroma.UserInviteToken
   alias Pleroma.Web.ActivityPub.Builder
   alias Pleroma.Web.ActivityPub.Pipeline
@@ -438,6 +439,36 @@ defmodule Mix.Tasks.Pleroma.User do
     end
   end
 
+  def run(["blocking", nickname]) do
+    start_pleroma()
+    with %User{local: true} = user <- User.get_cached_by_nickname(nickname) do
+      blocks = User.following_ap_ids(user)
+      IO.inspect(blocks, limit: :infinity)
+    end
+  end
+
+  def run(["timeline_query", nickname]) do
+    start_pleroma()
+    params = %{ local: true }
+    with %User{local: true} = user <- User.get_cached_by_nickname(nickname) do
+      params =
+        params
+        |> Map.put(:type, ["Create", "Announce"])
+       |> Map.put(:limit, 20)
+        |> Map.put(:blocking_user, user)
+        |> Map.put(:muting_user, user)
+        |> Map.put(:reply_filtering_user, user)
+        |> Map.put(:announce_filtering_user, user)
+        |> Map.put(:user, user)
+        |> Map.put(:local_only, params[:local])
+        |> Map.delete(:local)
+      activities =
+      [user.ap_id | User.following(user)]
+      |> ActivityPub.fetch_activities_secret(params)
+      IO.inspect(activities, limit: :infinity)
+    end
+  end
+
   def run(["list"]) do
     start_pleroma()
 
index 8324ca22c80bcedace3bd1a2d1f8985d941c0945..ba0a7d1435e72cf11f409d58177de9baf2c8d7f4 100644 (file)
@@ -494,6 +494,15 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
     |> maybe_update_cc(list_memberships, opts[:user])
   end
 
+  def fetch_activities_secret(recipients, opts \\ %{}, pagination \\ :keyset) do
+    list_memberships = Pleroma.List.memberships(opts[:user])
+
+    fetch_activities_query_secret(recipients ++ list_memberships, opts)
+    |> fetch_paginated_optimized(opts, pagination)
+    |> Enum.reverse()
+  end
+
+
   @spec fetch_public_or_unlisted_activities(map(), Pagination.type()) :: [Activity.t()]
   def fetch_public_or_unlisted_activities(opts \\ %{}, pagination \\ :keyset) do
     opts = Map.delete(opts, :user)
@@ -1309,6 +1318,64 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
     {restrict_blocked_opts, restrict_muted_opts, restrict_muted_reblogs_opts}
   end
 
+  def fetch_activities_query_secret(recipients, opts \\ %{}) do
+    opts = normalize_fetch_activities_query_opts(opts)
+
+    {restrict_blocked_opts, restrict_muted_opts, restrict_muted_reblogs_opts} =
+      fetch_activities_query_ap_ids_ops(opts)
+
+    config = %{
+      skip_thread_containment: true
+    }
+
+    query =
+      Activity
+      |> maybe_preload_objects(opts)
+      |> maybe_preload_bookmarks(opts)
+      |> maybe_preload_report_notes(opts)
+      |> maybe_set_thread_muted_field(opts)
+      |> maybe_order(opts)
+      |> restrict_recipients(recipients, opts[:user])
+      |> restrict_replies(opts)
+      |> restrict_since(opts)
+      |> restrict_local(opts)
+      |> restrict_remote(opts)
+      |> restrict_actor(opts)
+      |> restrict_type(opts)
+      |> restrict_state(opts)
+      |> restrict_favorited_by(opts)
+      |> restrict_blocked(restrict_blocked_opts)
+      |> restrict_blockers_visibility(opts)
+      |> restrict_muted(restrict_muted_opts)
+      |> restrict_filtered(opts)
+      |> restrict_media(opts)
+      |> restrict_visibility(opts)
+      |> restrict_thread_visibility(opts, config)
+      |> restrict_reblogs(opts)
+      |> restrict_pinned(opts)
+      |> restrict_muted_reblogs(restrict_muted_reblogs_opts)
+      |> restrict_instance(opts)
+      |> restrict_announce_object_actor(opts)
+      |> restrict_filtered(opts)
+      |> Activity.restrict_deactivated_users()
+      |> exclude_poll_votes(opts)
+      |> exclude_chat_messages(opts)
+      |> exclude_invisible_actors(opts)
+      |> exclude_visibility(opts)
+
+    if Config.feature_enabled?(:improved_hashtag_timeline) do
+      query
+      |> restrict_hashtag_any(opts)
+      |> restrict_hashtag_all(opts)
+      |> restrict_hashtag_reject_any(opts)
+    else
+      query
+      |> restrict_embedded_tag_any(opts)
+      |> restrict_embedded_tag_all(opts)
+      |> restrict_embedded_tag_reject_any(opts)
+    end
+  end
+
   def fetch_activities_query(recipients, opts \\ %{}) do
     opts = normalize_fetch_activities_query_opts(opts)