From 5d901c337ed23e4b937df9e0bf8a764a58288a37 Mon Sep 17 00:00:00 2001 From: sadposter Date: Tue, 14 Dec 2021 13:58:16 +0000 Subject: [PATCH] fix inbound federation --- lib/mix/tasks/pleroma/activity.ex | 23 ++++++++++++----------- lib/mix/tasks/pleroma/search.ex | 22 +++++++++++++++++----- lib/mix/tasks/pleroma/user.ex | 11 +++++++---- lib/pleroma/elasticsearch/store.ex | 4 +++- lib/pleroma/search/elasticsearch.ex | 9 ++++++++- lib/pleroma/web/common_api.ex | 2 ++ lib/pleroma/web/endpoint.ex | 1 - 7 files changed, 49 insertions(+), 23 deletions(-) diff --git a/lib/mix/tasks/pleroma/activity.ex b/lib/mix/tasks/pleroma/activity.ex index 512897a02..53323efd6 100644 --- a/lib/mix/tasks/pleroma/activity.ex +++ b/lib/mix/tasks/pleroma/activity.ex @@ -28,18 +28,19 @@ defmodule Mix.Tasks.Pleroma.Activity do 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 + |> 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 diff --git a/lib/mix/tasks/pleroma/search.ex b/lib/mix/tasks/pleroma/search.ex index 4e8e480d4..25a277f88 100644 --- a/lib/mix/tasks/pleroma/search.ex +++ b/lib/mix/tasks/pleroma/search.ex @@ -11,6 +11,16 @@ defmodule Mix.Tasks.Pleroma.Search do @shortdoc "Manages elasticsearch" + def run(["import_since", d | _rest]) do + start_pleroma() + {:ok, since, _} = DateTime.from_iso8601(d) + + from(a in Activity, where: not ilike(a.actor, "%/relay") and a.inserted_at > ^since) + |> Activity.with_preloaded_object() + |> Activity.with_preloaded_user_actor() + |> get_all + end + def run(["import" | _rest]) do start_pleroma() @@ -40,11 +50,13 @@ defmodule Mix.Tasks.Pleroma.Search do :ok else res - |> Enum.filter(fn x -> - t = x.object - |> Map.get(:data, %{}) - |> Map.get("type", "") - t == "Note" + |> Enum.filter(fn x -> + t = + x.object + |> Map.get(:data, %{}) + |> Map.get("type", "") + + t == "Note" end) |> Pleroma.Elasticsearch.bulk_post(:activities) diff --git a/lib/mix/tasks/pleroma/user.ex b/lib/mix/tasks/pleroma/user.ex index 9bda7b485..6c26e0e95 100644 --- a/lib/mix/tasks/pleroma/user.ex +++ b/lib/mix/tasks/pleroma/user.ex @@ -441,6 +441,7 @@ defmodule Mix.Tasks.Pleroma.User do 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) @@ -449,12 +450,13 @@ defmodule Mix.Tasks.Pleroma.User do def run(["timeline_query", nickname]) do start_pleroma() - params = %{ local: true } + 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(:limit, 20) |> Map.put(:blocking_user, user) |> Map.put(:muting_user, user) |> Map.put(:reply_filtering_user, user) @@ -462,9 +464,10 @@ defmodule Mix.Tasks.Pleroma.User do |> Map.put(:user, user) |> Map.put(:local_only, params[:local]) |> Map.delete(:local) + _activities = - [user.ap_id | User.following(user)] - |> ActivityPub.fetch_activities(params) + [user.ap_id | User.following(user)] + |> ActivityPub.fetch_activities(params) end end diff --git a/lib/pleroma/elasticsearch/store.ex b/lib/pleroma/elasticsearch/store.ex index f309bf7a5..68e14bb64 100644 --- a/lib/pleroma/elasticsearch/store.ex +++ b/lib/pleroma/elasticsearch/store.ex @@ -17,7 +17,9 @@ defmodule Pleroma.Elasticsearch do maybe_put_into_elasticsearch(activity) end - def maybe_put_into_elasticsearch(%{data: %{"type" => "Create"}, object: %{data: %{"type" => "Note"}}} = activity) do + def maybe_put_into_elasticsearch( + %{data: %{"type" => "Create"}, object: %{data: %{"type" => "Note"}}} = activity + ) do if Config.get([:search, :provider]) == Pleroma.Search.Elasticsearch do actor = Pleroma.Activity.user_actor(activity) diff --git a/lib/pleroma/search/elasticsearch.ex b/lib/pleroma/search/elasticsearch.ex index 181009ad6..3815ef766 100644 --- a/lib/pleroma/search/elasticsearch.ex +++ b/lib/pleroma/search/elasticsearch.ex @@ -46,6 +46,12 @@ defmodule Pleroma.Search.Elasticsearch do @impl Pleroma.Search def search(%{assigns: %{user: user}} = _conn, %{q: query} = _params, _options) do q = %{ + size: 500, + terminate_after: 500, + timeout: "10s", + sort: [ + %{"_timestamp" => "desc"} + ], query: %{ bool: %{ must: parse(String.trim(query)) @@ -63,7 +69,8 @@ defmodule Pleroma.Search.Elasticsearch do |> Map.get("hits", []) |> Enum.map(fn result -> result["_id"] end) |> Pleroma.Activity.all_by_ids_with_object() - |> Enum.filter(fn x -> Visibility.visible_for_user?(x, user) end) + |> Enum.filter(fn x -> Visibility.visible_for_user?(x, user) end) + |> Enum.reverse() %{ "accounts" => [], diff --git a/lib/pleroma/web/common_api.ex b/lib/pleroma/web/common_api.ex index f6a131c21..3266b1c60 100644 --- a/lib/pleroma/web/common_api.ex +++ b/lib/pleroma/web/common_api.ex @@ -398,9 +398,11 @@ defmodule Pleroma.Web.CommonAPI do def post(user, %{status: _} = data) do with {:ok, draft} <- ActivityDraft.create(user, data) do activity = ActivityPub.create(draft.changes, draft.preview?) + unless draft.preview? do Pleroma.Elasticsearch.maybe_put_into_elasticsearch(activity) end + activity end end diff --git a/lib/pleroma/web/endpoint.ex b/lib/pleroma/web/endpoint.ex index 196d0006b..0cb6aff16 100644 --- a/lib/pleroma/web/endpoint.ex +++ b/lib/pleroma/web/endpoint.ex @@ -79,7 +79,6 @@ defmodule Pleroma.Web.Endpoint do } ) - # Serve at "/" the static files from "priv/static" directory. # # You should set gzip to true if you are running phoenix.digest