summaryrefslogtreecommitdiff
path: root/lib/pleroma/web/admin_api/report.ex
blob: c79bee27e4be43c4eddc1e6759612c5fd4466952 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# Pleroma: A lightweight social networking server
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only

defmodule Pleroma.Web.AdminAPI.Report do
  alias Pleroma.Activity
  alias Pleroma.Object
  alias Pleroma.User

  def extract_report_info(
        %{data: %{"actor" => actor, "object" => [account_ap_id | status_ap_ids]}} = report
      ) do
    user = User.get_cached_by_ap_id(actor)
    account = User.get_cached_by_ap_id(account_ap_id)

    statuses =
      status_ap_ids
      |> Enum.reject(&is_nil(&1))
      |> Enum.map(fn
        act when is_map(act) ->
          Activity.get_create_by_object_ap_id_with_object(act["id"]) ||
            Activity.get_by_ap_id_with_object(act["id"]) || make_fake_activity(act, user)

        act when is_binary(act) ->
          Activity.get_create_by_object_ap_id_with_object(act) ||
            Activity.get_by_ap_id_with_object(act)
      end)

    %{report: report, user: user, account: account, statuses: statuses}
  end

  defp make_fake_activity(act, user) do
    %Activity{
      id: "pleroma:fake",
      data: %{
        "actor" => user.ap_id,
        "type" => "Create",
        "to" => [],
        "cc" => [],
        "object" => act["id"],
        "published" => act["published"],
        "id" => act["id"],
        "context" => "pleroma:fake"
      },
      recipients: [user.ap_id],
      object: %Object{
        data: %{
          "actor" => user.ap_id,
          "type" => "Note",
          "content" => act["content"],
          "published" => act["published"],
          "to" => [],
          "cc" => [],
          "id" => act["id"],
          "context" => "pleroma:fake"
        }
      }
    }
  end
end