2020-07-09 15:24:28 +00:00
|
|
|
defmodule Mobilizon.Federation.ActivityPub.Types.Reports do
|
|
|
|
@moduledoc false
|
2021-09-28 17:40:37 +00:00
|
|
|
alias Mobilizon.{Actors, Discussions, Events, Reports}
|
2020-07-09 15:24:28 +00:00
|
|
|
alias Mobilizon.Actors.Actor
|
2021-09-28 17:40:37 +00:00
|
|
|
alias Mobilizon.Events.Event
|
2021-09-10 09:27:59 +00:00
|
|
|
alias Mobilizon.Federation.ActivityStream
|
2020-07-09 15:24:28 +00:00
|
|
|
alias Mobilizon.Federation.ActivityStream.Convertible
|
|
|
|
alias Mobilizon.Reports.Report
|
|
|
|
alias Mobilizon.Service.Formatter.HTML
|
|
|
|
require Logger
|
|
|
|
|
2021-09-28 17:40:37 +00:00
|
|
|
@spec flag(map(), boolean(), map()) ::
|
|
|
|
{:ok, Report.t(), ActivityStream.t()} | {:error, Ecto.Changeset.t()}
|
2020-07-09 15:24:28 +00:00
|
|
|
def flag(args, local \\ false, _additional \\ %{}) do
|
2021-09-28 17:40:37 +00:00
|
|
|
with {:ok, %Report{} = report} <- args |> prepare_args_for_report() |> Reports.create_report() do
|
|
|
|
report_as_data = Convertible.model_to_as(report)
|
|
|
|
cc = if(local, do: [report.reported.url], else: [])
|
|
|
|
report_as_data = Map.merge(report_as_data, %{"to" => [], "cc" => cc})
|
|
|
|
{:ok, report, report_as_data}
|
2020-07-09 15:24:28 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2021-09-10 09:27:59 +00:00
|
|
|
@spec prepare_args_for_report(map()) :: map()
|
2020-07-09 15:24:28 +00:00
|
|
|
defp prepare_args_for_report(args) do
|
2021-09-28 17:40:37 +00:00
|
|
|
%Actor{} = reporter_actor = Actors.get_actor!(args.reporter_id)
|
|
|
|
%Actor{} = reported_actor = Actors.get_actor!(args.reported_id)
|
|
|
|
content = HTML.strip_tags(args.content)
|
|
|
|
|
|
|
|
event_id = Map.get(args, :event_id)
|
|
|
|
|
|
|
|
event =
|
|
|
|
if is_nil(event_id) do
|
|
|
|
nil
|
|
|
|
else
|
|
|
|
{:ok, %Event{} = event} = Events.get_event(event_id)
|
|
|
|
event
|
|
|
|
end
|
|
|
|
|
|
|
|
comments =
|
|
|
|
Discussions.list_comments_by_actor_and_ids(
|
|
|
|
reported_actor.id,
|
|
|
|
Map.get(args, :comments_ids, [])
|
|
|
|
)
|
|
|
|
|
|
|
|
Map.merge(args, %{
|
|
|
|
reporter: reporter_actor,
|
|
|
|
reported: reported_actor,
|
|
|
|
content: content,
|
|
|
|
event: event,
|
|
|
|
comments: comments
|
|
|
|
})
|
2020-07-09 15:24:28 +00:00
|
|
|
end
|
|
|
|
end
|