Merge branch 'issue/2256' into 'develop'
[#2256] added subject actor to moderation log See merge request pleroma/pleroma!3164
This commit is contained in:
commit
6adad96c79
|
@ -194,6 +194,19 @@ def get_by_id(id) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def get_by_id_with_user_actor(id) do
|
||||||
|
case FlakeId.flake_id?(id) do
|
||||||
|
true ->
|
||||||
|
Activity
|
||||||
|
|> where([a], a.id == ^id)
|
||||||
|
|> with_preloaded_user_actor()
|
||||||
|
|> Repo.one()
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def get_by_id_with_object(id) do
|
def get_by_id_with_object(id) do
|
||||||
Activity
|
Activity
|
||||||
|> where(id: ^id)
|
|> where(id: ^id)
|
||||||
|
|
|
@ -12,6 +12,26 @@ defmodule Pleroma.ModerationLog do
|
||||||
|
|
||||||
import Ecto.Query
|
import Ecto.Query
|
||||||
|
|
||||||
|
@type t :: %__MODULE__{}
|
||||||
|
@type log_subject :: Activity.t() | User.t() | list(User.t())
|
||||||
|
@type log_params :: %{
|
||||||
|
required(:actor) => User.t(),
|
||||||
|
required(:action) => String.t(),
|
||||||
|
optional(:subject) => log_subject(),
|
||||||
|
optional(:subject_actor) => User.t(),
|
||||||
|
optional(:subject_id) => String.t(),
|
||||||
|
optional(:subjects) => list(User.t()),
|
||||||
|
optional(:permission) => String.t(),
|
||||||
|
optional(:text) => String.t(),
|
||||||
|
optional(:sensitive) => String.t(),
|
||||||
|
optional(:visibility) => String.t(),
|
||||||
|
optional(:followed) => User.t(),
|
||||||
|
optional(:follower) => User.t(),
|
||||||
|
optional(:nicknames) => list(String.t()),
|
||||||
|
optional(:tags) => list(String.t()),
|
||||||
|
optional(:target) => String.t()
|
||||||
|
}
|
||||||
|
|
||||||
schema "moderation_log" do
|
schema "moderation_log" do
|
||||||
field(:data, :map)
|
field(:data, :map)
|
||||||
|
|
||||||
|
@ -90,203 +110,105 @@ defp parse_datetime(datetime) do
|
||||||
parsed_datetime
|
parsed_datetime
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec insert_log(%{actor: User, subject: [User], action: String.t(), permission: String.t()}) ::
|
defp prepare_log_data(%{actor: actor, action: action} = attrs) do
|
||||||
{:ok, ModerationLog} | {:error, any}
|
%{
|
||||||
def insert_log(%{
|
|
||||||
actor: %User{} = actor,
|
|
||||||
subject: subjects,
|
|
||||||
action: action,
|
|
||||||
permission: permission
|
|
||||||
}) do
|
|
||||||
%ModerationLog{
|
|
||||||
data: %{
|
|
||||||
"actor" => user_to_map(actor),
|
"actor" => user_to_map(actor),
|
||||||
"subject" => user_to_map(subjects),
|
|
||||||
"action" => action,
|
"action" => action,
|
||||||
"permission" => permission,
|
|
||||||
"message" => ""
|
"message" => ""
|
||||||
}
|
}
|
||||||
}
|
|> Pleroma.Maps.put_if_present("subject_actor", user_to_map(attrs[:subject_actor]))
|
||||||
|> insert_log_entry_with_message()
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec insert_log(%{actor: User, subject: User, action: String.t()}) ::
|
defp prepare_log_data(attrs), do: attrs
|
||||||
{:ok, ModerationLog} | {:error, any}
|
|
||||||
def insert_log(%{
|
@spec insert_log(log_params()) :: {:ok, ModerationLog} | {:error, any}
|
||||||
actor: %User{} = actor,
|
def insert_log(%{actor: %User{}, subject: subjects, permission: permission} = attrs) do
|
||||||
action: "report_update",
|
data =
|
||||||
subject: %Activity{data: %{"type" => "Flag"}} = subject
|
attrs
|
||||||
}) do
|
|> prepare_log_data
|
||||||
%ModerationLog{
|
|> Map.merge(%{"subject" => user_to_map(subjects), "permission" => permission})
|
||||||
data: %{
|
|
||||||
"actor" => user_to_map(actor),
|
insert_log_entry_with_message(%ModerationLog{data: data})
|
||||||
"action" => "report_update",
|
|
||||||
"subject" => report_to_map(subject),
|
|
||||||
"message" => ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|> insert_log_entry_with_message()
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec insert_log(%{actor: User, subject: Activity, action: String.t(), text: String.t()}) ::
|
def insert_log(%{actor: %User{}, action: action, subject: %Activity{} = subject} = attrs)
|
||||||
{:ok, ModerationLog} | {:error, any}
|
when action in ["report_note_delete", "report_update", "report_note"] do
|
||||||
def insert_log(%{
|
data =
|
||||||
actor: %User{} = actor,
|
attrs
|
||||||
action: "report_note",
|
|> prepare_log_data
|
||||||
subject: %Activity{} = subject,
|
|> Pleroma.Maps.put_if_present("text", attrs[:text])
|
||||||
text: text
|
|> Map.merge(%{"subject" => report_to_map(subject)})
|
||||||
}) do
|
|
||||||
%ModerationLog{
|
insert_log_entry_with_message(%ModerationLog{data: data})
|
||||||
data: %{
|
|
||||||
"actor" => user_to_map(actor),
|
|
||||||
"action" => "report_note",
|
|
||||||
"subject" => report_to_map(subject),
|
|
||||||
"text" => text
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|> insert_log_entry_with_message()
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec insert_log(%{actor: User, subject: Activity, action: String.t(), text: String.t()}) ::
|
def insert_log(
|
||||||
{:ok, ModerationLog} | {:error, any}
|
%{
|
||||||
def insert_log(%{
|
actor: %User{},
|
||||||
actor: %User{} = actor,
|
action: action,
|
||||||
action: "report_note_delete",
|
|
||||||
subject: %Activity{} = subject,
|
|
||||||
text: text
|
|
||||||
}) do
|
|
||||||
%ModerationLog{
|
|
||||||
data: %{
|
|
||||||
"actor" => user_to_map(actor),
|
|
||||||
"action" => "report_note_delete",
|
|
||||||
"subject" => report_to_map(subject),
|
|
||||||
"text" => text
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|> insert_log_entry_with_message()
|
|
||||||
end
|
|
||||||
|
|
||||||
@spec insert_log(%{
|
|
||||||
actor: User,
|
|
||||||
subject: Activity,
|
|
||||||
action: String.t(),
|
|
||||||
sensitive: String.t(),
|
|
||||||
visibility: String.t()
|
|
||||||
}) :: {:ok, ModerationLog} | {:error, any}
|
|
||||||
def insert_log(%{
|
|
||||||
actor: %User{} = actor,
|
|
||||||
action: "status_update",
|
|
||||||
subject: %Activity{} = subject,
|
subject: %Activity{} = subject,
|
||||||
sensitive: sensitive,
|
sensitive: sensitive,
|
||||||
visibility: visibility
|
visibility: visibility
|
||||||
}) do
|
} = attrs
|
||||||
%ModerationLog{
|
)
|
||||||
data: %{
|
when action == "status_update" do
|
||||||
"actor" => user_to_map(actor),
|
data =
|
||||||
"action" => "status_update",
|
attrs
|
||||||
|
|> prepare_log_data
|
||||||
|
|> Map.merge(%{
|
||||||
"subject" => status_to_map(subject),
|
"subject" => status_to_map(subject),
|
||||||
"sensitive" => sensitive,
|
"sensitive" => sensitive,
|
||||||
"visibility" => visibility,
|
"visibility" => visibility
|
||||||
"message" => ""
|
})
|
||||||
}
|
|
||||||
}
|
insert_log_entry_with_message(%ModerationLog{data: data})
|
||||||
|> insert_log_entry_with_message()
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec insert_log(%{actor: User, action: String.t(), subject_id: String.t()}) ::
|
def insert_log(%{actor: %User{}, action: action, subject_id: subject_id} = attrs)
|
||||||
{:ok, ModerationLog} | {:error, any}
|
when action == "status_delete" do
|
||||||
def insert_log(%{
|
data =
|
||||||
actor: %User{} = actor,
|
attrs
|
||||||
action: "status_delete",
|
|> prepare_log_data
|
||||||
subject_id: subject_id
|
|> Map.merge(%{"subject_id" => subject_id})
|
||||||
}) do
|
|
||||||
%ModerationLog{
|
insert_log_entry_with_message(%ModerationLog{data: data})
|
||||||
data: %{
|
|
||||||
"actor" => user_to_map(actor),
|
|
||||||
"action" => "status_delete",
|
|
||||||
"subject_id" => subject_id,
|
|
||||||
"message" => ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|> insert_log_entry_with_message()
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec insert_log(%{actor: User, subject: User, action: String.t()}) ::
|
def insert_log(%{actor: %User{}, subject: subject, action: _action} = attrs) do
|
||||||
{:ok, ModerationLog} | {:error, any}
|
data =
|
||||||
def insert_log(%{actor: %User{} = actor, subject: subject, action: action}) do
|
attrs
|
||||||
%ModerationLog{
|
|> prepare_log_data
|
||||||
data: %{
|
|> Map.merge(%{"subject" => user_to_map(subject)})
|
||||||
"actor" => user_to_map(actor),
|
|
||||||
"action" => action,
|
insert_log_entry_with_message(%ModerationLog{data: data})
|
||||||
"subject" => user_to_map(subject),
|
|
||||||
"message" => ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|> insert_log_entry_with_message()
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec insert_log(%{actor: User, subjects: [User], action: String.t()}) ::
|
def insert_log(%{actor: %User{}, subjects: subjects, action: _action} = attrs) do
|
||||||
{:ok, ModerationLog} | {:error, any}
|
data =
|
||||||
def insert_log(%{actor: %User{} = actor, subjects: subjects, action: action}) do
|
attrs
|
||||||
subjects = Enum.map(subjects, &user_to_map/1)
|
|> prepare_log_data
|
||||||
|
|> Map.merge(%{"subjects" => user_to_map(subjects)})
|
||||||
|
|
||||||
%ModerationLog{
|
insert_log_entry_with_message(%ModerationLog{data: data})
|
||||||
data: %{
|
|
||||||
"actor" => user_to_map(actor),
|
|
||||||
"action" => action,
|
|
||||||
"subjects" => subjects,
|
|
||||||
"message" => ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|> insert_log_entry_with_message()
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec insert_log(%{actor: User, action: String.t(), followed: User, follower: User}) ::
|
def insert_log(
|
||||||
{:ok, ModerationLog} | {:error, any}
|
%{
|
||||||
def insert_log(%{
|
actor: %User{},
|
||||||
actor: %User{} = actor,
|
|
||||||
followed: %User{} = followed,
|
followed: %User{} = followed,
|
||||||
follower: %User{} = follower,
|
follower: %User{} = follower,
|
||||||
action: "follow"
|
action: action
|
||||||
}) do
|
} = attrs
|
||||||
%ModerationLog{
|
)
|
||||||
data: %{
|
when action in ["unfollow", "follow"] do
|
||||||
"actor" => user_to_map(actor),
|
data =
|
||||||
"action" => "follow",
|
attrs
|
||||||
"followed" => user_to_map(followed),
|
|> prepare_log_data
|
||||||
"follower" => user_to_map(follower),
|
|> Map.merge(%{"followed" => user_to_map(followed), "follower" => user_to_map(follower)})
|
||||||
"message" => ""
|
|
||||||
}
|
insert_log_entry_with_message(%ModerationLog{data: data})
|
||||||
}
|
|
||||||
|> insert_log_entry_with_message()
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec insert_log(%{actor: User, action: String.t(), followed: User, follower: User}) ::
|
|
||||||
{:ok, ModerationLog} | {:error, any}
|
|
||||||
def insert_log(%{
|
|
||||||
actor: %User{} = actor,
|
|
||||||
followed: %User{} = followed,
|
|
||||||
follower: %User{} = follower,
|
|
||||||
action: "unfollow"
|
|
||||||
}) do
|
|
||||||
%ModerationLog{
|
|
||||||
data: %{
|
|
||||||
"actor" => user_to_map(actor),
|
|
||||||
"action" => "unfollow",
|
|
||||||
"followed" => user_to_map(followed),
|
|
||||||
"follower" => user_to_map(follower),
|
|
||||||
"message" => ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|> insert_log_entry_with_message()
|
|
||||||
end
|
|
||||||
|
|
||||||
@spec insert_log(%{
|
|
||||||
actor: User,
|
|
||||||
action: String.t(),
|
|
||||||
nicknames: [String.t()],
|
|
||||||
tags: [String.t()]
|
|
||||||
}) :: {:ok, ModerationLog} | {:error, any}
|
|
||||||
def insert_log(%{
|
def insert_log(%{
|
||||||
actor: %User{} = actor,
|
actor: %User{} = actor,
|
||||||
nicknames: nicknames,
|
nicknames: nicknames,
|
||||||
|
@ -305,27 +227,16 @@ def insert_log(%{
|
||||||
|> insert_log_entry_with_message()
|
|> insert_log_entry_with_message()
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec insert_log(%{actor: User, action: String.t(), target: String.t()}) ::
|
def insert_log(%{actor: %User{}, action: action, target: target} = attrs)
|
||||||
{:ok, ModerationLog} | {:error, any}
|
|
||||||
def insert_log(%{
|
|
||||||
actor: %User{} = actor,
|
|
||||||
action: action,
|
|
||||||
target: target
|
|
||||||
})
|
|
||||||
when action in ["relay_follow", "relay_unfollow"] do
|
when action in ["relay_follow", "relay_unfollow"] do
|
||||||
%ModerationLog{
|
data =
|
||||||
data: %{
|
attrs
|
||||||
"actor" => user_to_map(actor),
|
|> prepare_log_data
|
||||||
"action" => action,
|
|> Map.merge(%{"target" => target})
|
||||||
"target" => target,
|
|
||||||
"message" => ""
|
insert_log_entry_with_message(%ModerationLog{data: data})
|
||||||
}
|
|
||||||
}
|
|
||||||
|> insert_log_entry_with_message()
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec insert_log(%{actor: User, action: String.t(), subject_id: String.t()}) ::
|
|
||||||
{:ok, ModerationLog} | {:error, any}
|
|
||||||
def insert_log(%{actor: %User{} = actor, action: "chat_message_delete", subject_id: subject_id}) do
|
def insert_log(%{actor: %User{} = actor, action: "chat_message_delete", subject_id: subject_id}) do
|
||||||
%ModerationLog{
|
%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
|
@ -345,32 +256,27 @@ defp insert_log_entry_with_message(entry) do
|
||||||
end
|
end
|
||||||
|
|
||||||
defp user_to_map(users) when is_list(users) do
|
defp user_to_map(users) when is_list(users) do
|
||||||
users |> Enum.map(&user_to_map/1)
|
Enum.map(users, &user_to_map/1)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp user_to_map(%User{} = user) do
|
defp user_to_map(%User{} = user) do
|
||||||
user
|
user
|
||||||
|> Map.from_struct()
|
|
||||||
|> Map.take([:id, :nickname])
|
|> Map.take([:id, :nickname])
|
||||||
|> Map.new(fn {k, v} -> {Atom.to_string(k), v} end)
|
|> Map.new(fn {k, v} -> {Atom.to_string(k), v} end)
|
||||||
|> Map.put("type", "user")
|
|> Map.put("type", "user")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp user_to_map(_), do: nil
|
||||||
|
|
||||||
defp report_to_map(%Activity{} = report) do
|
defp report_to_map(%Activity{} = report) do
|
||||||
%{
|
%{"type" => "report", "id" => report.id, "state" => report.data["state"]}
|
||||||
"type" => "report",
|
|
||||||
"id" => report.id,
|
|
||||||
"state" => report.data["state"]
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
defp status_to_map(%Activity{} = status) do
|
defp status_to_map(%Activity{} = status) do
|
||||||
%{
|
%{"type" => "status", "id" => status.id}
|
||||||
"type" => "status",
|
|
||||||
"id" => status.id
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@spec get_log_entry_message(ModerationLog.t()) :: String.t()
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
|
@ -382,7 +288,6 @@ def get_log_entry_message(%ModerationLog{
|
||||||
"@#{actor_nickname} made @#{follower_nickname} #{action} @#{followed_nickname}"
|
"@#{actor_nickname} made @#{follower_nickname} #{action} @#{followed_nickname}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
|
@ -393,7 +298,6 @@ def get_log_entry_message(%ModerationLog{
|
||||||
"@#{actor_nickname} deleted users: #{users_to_nicknames_string(subjects)}"
|
"@#{actor_nickname} deleted users: #{users_to_nicknames_string(subjects)}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
|
@ -404,7 +308,6 @@ def get_log_entry_message(%ModerationLog{
|
||||||
"@#{actor_nickname} created users: #{users_to_nicknames_string(subjects)}"
|
"@#{actor_nickname} created users: #{users_to_nicknames_string(subjects)}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
|
@ -415,7 +318,6 @@ def get_log_entry_message(%ModerationLog{
|
||||||
"@#{actor_nickname} activated users: #{users_to_nicknames_string(users)}"
|
"@#{actor_nickname} activated users: #{users_to_nicknames_string(users)}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
|
@ -426,7 +328,6 @@ def get_log_entry_message(%ModerationLog{
|
||||||
"@#{actor_nickname} deactivated users: #{users_to_nicknames_string(users)}"
|
"@#{actor_nickname} deactivated users: #{users_to_nicknames_string(users)}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
|
@ -437,7 +338,6 @@ def get_log_entry_message(%ModerationLog{
|
||||||
"@#{actor_nickname} approved users: #{users_to_nicknames_string(users)}"
|
"@#{actor_nickname} approved users: #{users_to_nicknames_string(users)}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
|
@ -451,7 +351,6 @@ def get_log_entry_message(%ModerationLog{
|
||||||
"@#{actor_nickname} added tags: #{tags_string} to users: #{nicknames_to_string(nicknames)}"
|
"@#{actor_nickname} added tags: #{tags_string} to users: #{nicknames_to_string(nicknames)}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
|
@ -465,7 +364,6 @@ def get_log_entry_message(%ModerationLog{
|
||||||
"@#{actor_nickname} removed tags: #{tags_string} from users: #{nicknames_to_string(nicknames)}"
|
"@#{actor_nickname} removed tags: #{tags_string} from users: #{nicknames_to_string(nicknames)}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
|
@ -477,7 +375,6 @@ def get_log_entry_message(%ModerationLog{
|
||||||
"@#{actor_nickname} made #{users_to_nicknames_string(users)} #{permission}"
|
"@#{actor_nickname} made #{users_to_nicknames_string(users)} #{permission}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
|
@ -489,7 +386,6 @@ def get_log_entry_message(%ModerationLog{
|
||||||
"@#{actor_nickname} revoked #{permission} role from #{users_to_nicknames_string(users)}"
|
"@#{actor_nickname} revoked #{permission} role from #{users_to_nicknames_string(users)}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
|
@ -500,7 +396,6 @@ def get_log_entry_message(%ModerationLog{
|
||||||
"@#{actor_nickname} followed relay: #{target}"
|
"@#{actor_nickname} followed relay: #{target}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
|
@ -511,42 +406,48 @@ def get_log_entry_message(%ModerationLog{
|
||||||
"@#{actor_nickname} unfollowed relay: #{target}"
|
"@#{actor_nickname} unfollowed relay: #{target}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
def get_log_entry_message(
|
||||||
def get_log_entry_message(%ModerationLog{
|
%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
"action" => "report_update",
|
"action" => "report_update",
|
||||||
"subject" => %{"id" => subject_id, "state" => state, "type" => "report"}
|
"subject" => %{"id" => subject_id, "state" => state, "type" => "report"}
|
||||||
}
|
}
|
||||||
}) do
|
} = log
|
||||||
"@#{actor_nickname} updated report ##{subject_id} with '#{state}' state"
|
) do
|
||||||
|
"@#{actor_nickname} updated report ##{subject_id}" <>
|
||||||
|
subject_actor_nickname(log, " (on user ", ")") <>
|
||||||
|
" with '#{state}' state"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
def get_log_entry_message(
|
||||||
def get_log_entry_message(%ModerationLog{
|
%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
"action" => "report_note",
|
"action" => "report_note",
|
||||||
"subject" => %{"id" => subject_id, "type" => "report"},
|
"subject" => %{"id" => subject_id, "type" => "report"},
|
||||||
"text" => text
|
"text" => text
|
||||||
}
|
}
|
||||||
}) do
|
} = log
|
||||||
"@#{actor_nickname} added note '#{text}' to report ##{subject_id}"
|
) do
|
||||||
|
"@#{actor_nickname} added note '#{text}' to report ##{subject_id}" <>
|
||||||
|
subject_actor_nickname(log, " on user ")
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
def get_log_entry_message(
|
||||||
def get_log_entry_message(%ModerationLog{
|
%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
"action" => "report_note_delete",
|
"action" => "report_note_delete",
|
||||||
"subject" => %{"id" => subject_id, "type" => "report"},
|
"subject" => %{"id" => subject_id, "type" => "report"},
|
||||||
"text" => text
|
"text" => text
|
||||||
}
|
}
|
||||||
}) do
|
} = log
|
||||||
"@#{actor_nickname} deleted note '#{text}' from report ##{subject_id}"
|
) do
|
||||||
|
"@#{actor_nickname} deleted note '#{text}' from report ##{subject_id}" <>
|
||||||
|
subject_actor_nickname(log, " on user ")
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
|
@ -559,7 +460,6 @@ def get_log_entry_message(%ModerationLog{
|
||||||
"@#{actor_nickname} updated status ##{subject_id}, set visibility: '#{visibility}'"
|
"@#{actor_nickname} updated status ##{subject_id}, set visibility: '#{visibility}'"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
|
@ -572,7 +472,6 @@ def get_log_entry_message(%ModerationLog{
|
||||||
"@#{actor_nickname} updated status ##{subject_id}, set sensitive: '#{sensitive}'"
|
"@#{actor_nickname} updated status ##{subject_id}, set sensitive: '#{sensitive}'"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
|
@ -587,7 +486,6 @@ def get_log_entry_message(%ModerationLog{
|
||||||
}'"
|
}'"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
|
@ -598,7 +496,6 @@ def get_log_entry_message(%ModerationLog{
|
||||||
"@#{actor_nickname} deleted status ##{subject_id}"
|
"@#{actor_nickname} deleted status ##{subject_id}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
|
@ -609,7 +506,6 @@ def get_log_entry_message(%ModerationLog{
|
||||||
"@#{actor_nickname} forced password reset for users: #{users_to_nicknames_string(subjects)}"
|
"@#{actor_nickname} forced password reset for users: #{users_to_nicknames_string(subjects)}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
|
@ -620,7 +516,6 @@ def get_log_entry_message(%ModerationLog{
|
||||||
"@#{actor_nickname} confirmed email for users: #{users_to_nicknames_string(subjects)}"
|
"@#{actor_nickname} confirmed email for users: #{users_to_nicknames_string(subjects)}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
|
@ -633,7 +528,6 @@ def get_log_entry_message(%ModerationLog{
|
||||||
}"
|
}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
|
@ -644,7 +538,6 @@ def get_log_entry_message(%ModerationLog{
|
||||||
"@#{actor_nickname} updated users: #{users_to_nicknames_string(subjects)}"
|
"@#{actor_nickname} updated users: #{users_to_nicknames_string(subjects)}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
"actor" => %{"nickname" => actor_nickname},
|
||||||
|
@ -676,4 +569,16 @@ defp users_to_nicknames_string(users) do
|
||||||
|> Enum.map(&"@#{&1["nickname"]}")
|
|> Enum.map(&"@#{&1["nickname"]}")
|
||||||
|> Enum.join(", ")
|
|> Enum.join(", ")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp subject_actor_nickname(%ModerationLog{data: data}, prefix_msg, postfix_msg \\ "") do
|
||||||
|
case data do
|
||||||
|
%{"subject_actor" => %{"nickname" => subject_actor}} ->
|
||||||
|
[prefix_msg, "@#{subject_actor}", postfix_msg]
|
||||||
|
|> Enum.reject(&(&1 == ""))
|
||||||
|
|> Enum.join()
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
""
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -50,10 +50,13 @@ def update(%{assigns: %{user: admin}, body_params: %{reports: reports}} = conn,
|
||||||
Enum.map(reports, fn report ->
|
Enum.map(reports, fn report ->
|
||||||
case CommonAPI.update_report_state(report.id, report.state) do
|
case CommonAPI.update_report_state(report.id, report.state) do
|
||||||
{:ok, activity} ->
|
{:ok, activity} ->
|
||||||
|
report = Activity.get_by_id_with_user_actor(activity.id)
|
||||||
|
|
||||||
ModerationLog.insert_log(%{
|
ModerationLog.insert_log(%{
|
||||||
action: "report_update",
|
action: "report_update",
|
||||||
actor: admin,
|
actor: admin,
|
||||||
subject: activity
|
subject: activity,
|
||||||
|
subject_actor: report.user_actor
|
||||||
})
|
})
|
||||||
|
|
||||||
activity
|
activity
|
||||||
|
@ -73,11 +76,13 @@ def update(%{assigns: %{user: admin}, body_params: %{reports: reports}} = conn,
|
||||||
def notes_create(%{assigns: %{user: user}, body_params: %{content: content}} = conn, %{
|
def notes_create(%{assigns: %{user: user}, body_params: %{content: content}} = conn, %{
|
||||||
id: report_id
|
id: report_id
|
||||||
}) do
|
}) do
|
||||||
with {:ok, _} <- ReportNote.create(user.id, report_id, content) do
|
with {:ok, _} <- ReportNote.create(user.id, report_id, content),
|
||||||
|
report <- Activity.get_by_id_with_user_actor(report_id) do
|
||||||
ModerationLog.insert_log(%{
|
ModerationLog.insert_log(%{
|
||||||
action: "report_note",
|
action: "report_note",
|
||||||
actor: user,
|
actor: user,
|
||||||
subject: Activity.get_by_id(report_id),
|
subject: report,
|
||||||
|
subject_actor: report.user_actor,
|
||||||
text: content
|
text: content
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -91,11 +96,13 @@ def notes_delete(%{assigns: %{user: user}} = conn, %{
|
||||||
id: note_id,
|
id: note_id,
|
||||||
report_id: report_id
|
report_id: report_id
|
||||||
}) do
|
}) do
|
||||||
with {:ok, note} <- ReportNote.destroy(note_id) do
|
with {:ok, note} <- ReportNote.destroy(note_id),
|
||||||
|
report <- Activity.get_by_id_with_user_actor(report_id) do
|
||||||
ModerationLog.insert_log(%{
|
ModerationLog.insert_log(%{
|
||||||
action: "report_note_delete",
|
action: "report_note_delete",
|
||||||
actor: user,
|
actor: user,
|
||||||
subject: Activity.get_by_id(report_id),
|
subject: report,
|
||||||
|
subject_actor: report.user_actor,
|
||||||
text: note.content
|
text: note.content
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -197,6 +197,13 @@ test "all_by_ids_with_object/1" do
|
||||||
assert [%{id: ^id1, object: %Object{}}, %{id: ^id2, object: %Object{}}] = activities
|
assert [%{id: ^id1, object: %Object{}}, %{id: ^id2, object: %Object{}}] = activities
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "get_by_id_with_user_actor/1" do
|
||||||
|
user = insert(:user)
|
||||||
|
activity = insert(:note_activity, note: insert(:note, user: user))
|
||||||
|
|
||||||
|
assert Activity.get_by_id_with_user_actor(activity.id).user_actor == user
|
||||||
|
end
|
||||||
|
|
||||||
test "get_by_id_with_object/1" do
|
test "get_by_id_with_object/1" do
|
||||||
%{id: id} = insert(:note_activity)
|
%{id: id} = insert(:note_activity)
|
||||||
|
|
||||||
|
|
|
@ -182,11 +182,14 @@ test "logging relay unfollow", %{moderator: moderator} do
|
||||||
end
|
end
|
||||||
|
|
||||||
test "logging report update", %{moderator: moderator} do
|
test "logging report update", %{moderator: moderator} do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
report = %Activity{
|
report = %Activity{
|
||||||
id: "9m9I1F4p8ftrTP6QTI",
|
id: "9m9I1F4p8ftrTP6QTI",
|
||||||
data: %{
|
data: %{
|
||||||
"type" => "Flag",
|
"type" => "Flag",
|
||||||
"state" => "resolved"
|
"state" => "resolved",
|
||||||
|
"actor" => user.ap_id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,35 +197,48 @@ test "logging report update", %{moderator: moderator} do
|
||||||
ModerationLog.insert_log(%{
|
ModerationLog.insert_log(%{
|
||||||
actor: moderator,
|
actor: moderator,
|
||||||
action: "report_update",
|
action: "report_update",
|
||||||
subject: report
|
subject: report,
|
||||||
|
subject_actor: user
|
||||||
})
|
})
|
||||||
|
|
||||||
log = Repo.one(ModerationLog)
|
log = Repo.one(ModerationLog)
|
||||||
|
|
||||||
assert log.data["message"] ==
|
assert log.data["message"] ==
|
||||||
"@#{moderator.nickname} updated report ##{report.id} with 'resolved' state"
|
"@#{moderator.nickname} updated report ##{report.id} (on user @#{user.nickname}) with 'resolved' state"
|
||||||
end
|
end
|
||||||
|
|
||||||
test "logging report response", %{moderator: moderator} do
|
test "logging report response", %{moderator: moderator} do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
report = %Activity{
|
report = %Activity{
|
||||||
id: "9m9I1F4p8ftrTP6QTI",
|
id: "9m9I1F4p8ftrTP6QTI",
|
||||||
data: %{
|
data: %{
|
||||||
"type" => "Note"
|
"type" => "Note",
|
||||||
|
"actor" => user.ap_id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
{:ok, _} =
|
attrs = %{
|
||||||
ModerationLog.insert_log(%{
|
|
||||||
actor: moderator,
|
actor: moderator,
|
||||||
action: "report_note",
|
action: "report_note",
|
||||||
subject: report,
|
subject: report,
|
||||||
text: "look at this"
|
text: "look at this"
|
||||||
})
|
}
|
||||||
|
|
||||||
log = Repo.one(ModerationLog)
|
{:ok, log1} = ModerationLog.insert_log(attrs)
|
||||||
|
log = Repo.get(ModerationLog, log1.id)
|
||||||
|
|
||||||
assert log.data["message"] ==
|
assert log.data["message"] ==
|
||||||
"@#{moderator.nickname} added note 'look at this' to report ##{report.id}"
|
"@#{moderator.nickname} added note 'look at this' to report ##{report.id}"
|
||||||
|
|
||||||
|
{:ok, log2} = ModerationLog.insert_log(Map.merge(attrs, %{subject_actor: user}))
|
||||||
|
|
||||||
|
log = Repo.get(ModerationLog, log2.id)
|
||||||
|
|
||||||
|
assert log.data["message"] ==
|
||||||
|
"@#{moderator.nickname} added note 'look at this' to report ##{report.id} on user @#{
|
||||||
|
user.nickname
|
||||||
|
}"
|
||||||
end
|
end
|
||||||
|
|
||||||
test "logging status sensitivity update", %{moderator: moderator} do
|
test "logging status sensitivity update", %{moderator: moderator} do
|
||||||
|
|
|
@ -122,13 +122,13 @@ test "mark report as resolved", %{conn: conn, id: id, admin: admin} do
|
||||||
})
|
})
|
||||||
|> json_response_and_validate_schema(:no_content)
|
|> json_response_and_validate_schema(:no_content)
|
||||||
|
|
||||||
activity = Activity.get_by_id(id)
|
activity = Activity.get_by_id_with_user_actor(id)
|
||||||
assert activity.data["state"] == "resolved"
|
assert activity.data["state"] == "resolved"
|
||||||
|
|
||||||
log_entry = Repo.one(ModerationLog)
|
log_entry = Repo.one(ModerationLog)
|
||||||
|
|
||||||
assert ModerationLog.get_log_entry_message(log_entry) ==
|
assert ModerationLog.get_log_entry_message(log_entry) ==
|
||||||
"@#{admin.nickname} updated report ##{id} with 'resolved' state"
|
"@#{admin.nickname} updated report ##{id} (on user @#{activity.user_actor.nickname}) with 'resolved' state"
|
||||||
end
|
end
|
||||||
|
|
||||||
test "closes report", %{conn: conn, id: id, admin: admin} do
|
test "closes report", %{conn: conn, id: id, admin: admin} do
|
||||||
|
@ -141,13 +141,13 @@ test "closes report", %{conn: conn, id: id, admin: admin} do
|
||||||
})
|
})
|
||||||
|> json_response_and_validate_schema(:no_content)
|
|> json_response_and_validate_schema(:no_content)
|
||||||
|
|
||||||
activity = Activity.get_by_id(id)
|
activity = Activity.get_by_id_with_user_actor(id)
|
||||||
assert activity.data["state"] == "closed"
|
assert activity.data["state"] == "closed"
|
||||||
|
|
||||||
log_entry = Repo.one(ModerationLog)
|
log_entry = Repo.one(ModerationLog)
|
||||||
|
|
||||||
assert ModerationLog.get_log_entry_message(log_entry) ==
|
assert ModerationLog.get_log_entry_message(log_entry) ==
|
||||||
"@#{admin.nickname} updated report ##{id} with 'closed' state"
|
"@#{admin.nickname} updated report ##{id} (on user @#{activity.user_actor.nickname}) with 'closed' state"
|
||||||
end
|
end
|
||||||
|
|
||||||
test "returns 400 when state is unknown", %{conn: conn, id: id} do
|
test "returns 400 when state is unknown", %{conn: conn, id: id} do
|
||||||
|
@ -193,18 +193,20 @@ test "updates state of multiple reports", %{
|
||||||
})
|
})
|
||||||
|> json_response_and_validate_schema(:no_content)
|
|> json_response_and_validate_schema(:no_content)
|
||||||
|
|
||||||
activity = Activity.get_by_id(id)
|
activity = Activity.get_by_id_with_user_actor(id)
|
||||||
second_activity = Activity.get_by_id(second_report_id)
|
second_activity = Activity.get_by_id_with_user_actor(second_report_id)
|
||||||
assert activity.data["state"] == "resolved"
|
assert activity.data["state"] == "resolved"
|
||||||
assert second_activity.data["state"] == "closed"
|
assert second_activity.data["state"] == "closed"
|
||||||
|
|
||||||
[first_log_entry, second_log_entry] = Repo.all(ModerationLog)
|
[first_log_entry, second_log_entry] = Repo.all(ModerationLog)
|
||||||
|
|
||||||
assert ModerationLog.get_log_entry_message(first_log_entry) ==
|
assert ModerationLog.get_log_entry_message(first_log_entry) ==
|
||||||
"@#{admin.nickname} updated report ##{id} with 'resolved' state"
|
"@#{admin.nickname} updated report ##{id} (on user @#{activity.user_actor.nickname}) with 'resolved' state"
|
||||||
|
|
||||||
assert ModerationLog.get_log_entry_message(second_log_entry) ==
|
assert ModerationLog.get_log_entry_message(second_log_entry) ==
|
||||||
"@#{admin.nickname} updated report ##{second_report_id} with 'closed' state"
|
"@#{admin.nickname} updated report ##{second_report_id} (on user @#{
|
||||||
|
second_activity.user_actor.nickname
|
||||||
|
}) with 'closed' state"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,98 @@
|
||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
defmodule Pleroma.Web.AdminAPI.ModerationLogViewTest do
|
||||||
|
use Pleroma.DataCase
|
||||||
|
|
||||||
|
alias Pleroma.Web.AdminAPI.ModerationLogView
|
||||||
|
|
||||||
|
describe "renders `report_note_delete` log messages" do
|
||||||
|
setup do
|
||||||
|
log1 = %Pleroma.ModerationLog{
|
||||||
|
data: %{
|
||||||
|
"action" => "report_note_delete",
|
||||||
|
"actor" => %{"id" => "A1I7G8", "nickname" => "admin", "type" => "user"},
|
||||||
|
"message" => "@admin deleted note 'mistake' from report #A1I7be on user @b-612",
|
||||||
|
"subject" => %{"id" => "A1I7be", "state" => "open", "type" => "report"},
|
||||||
|
"subject_actor" => %{"id" => "A1I7G8", "nickname" => "b-612", "type" => "user"},
|
||||||
|
"text" => "mistake"
|
||||||
|
},
|
||||||
|
inserted_at: ~N[2020-11-17 14:13:20]
|
||||||
|
}
|
||||||
|
|
||||||
|
log2 = %Pleroma.ModerationLog{
|
||||||
|
data: %{
|
||||||
|
"action" => "report_note_delete",
|
||||||
|
"actor" => %{"id" => "A1I7G8", "nickname" => "admin", "type" => "user"},
|
||||||
|
"message" => "@admin deleted note 'fake user' from report #A1I7be on user @j-612",
|
||||||
|
"subject" => %{"id" => "A1I7be", "state" => "open", "type" => "report"},
|
||||||
|
"subject_actor" => %{"id" => "A1I7G8", "nickname" => "j-612", "type" => "user"},
|
||||||
|
"text" => "fake user"
|
||||||
|
},
|
||||||
|
inserted_at: ~N[2020-11-17 14:13:20]
|
||||||
|
}
|
||||||
|
|
||||||
|
{:ok, %{log1: log1, log2: log2}}
|
||||||
|
end
|
||||||
|
|
||||||
|
test "renders `report_note_delete` log messages", %{log1: log1, log2: log2} do
|
||||||
|
assert ModerationLogView.render(
|
||||||
|
"index.json",
|
||||||
|
%{log: %{items: [log1, log2], count: 2}}
|
||||||
|
) == %{
|
||||||
|
items: [
|
||||||
|
%{
|
||||||
|
data: %{
|
||||||
|
"action" => "report_note_delete",
|
||||||
|
"actor" => %{"id" => "A1I7G8", "nickname" => "admin", "type" => "user"},
|
||||||
|
"message" =>
|
||||||
|
"@admin deleted note 'mistake' from report #A1I7be on user @b-612",
|
||||||
|
"subject" => %{"id" => "A1I7be", "state" => "open", "type" => "report"},
|
||||||
|
"subject_actor" => %{
|
||||||
|
"id" => "A1I7G8",
|
||||||
|
"nickname" => "b-612",
|
||||||
|
"type" => "user"
|
||||||
|
},
|
||||||
|
"text" => "mistake"
|
||||||
|
},
|
||||||
|
message: "@admin deleted note 'mistake' from report #A1I7be on user @b-612",
|
||||||
|
time: 1_605_622_400
|
||||||
|
},
|
||||||
|
%{
|
||||||
|
data: %{
|
||||||
|
"action" => "report_note_delete",
|
||||||
|
"actor" => %{"id" => "A1I7G8", "nickname" => "admin", "type" => "user"},
|
||||||
|
"message" =>
|
||||||
|
"@admin deleted note 'fake user' from report #A1I7be on user @j-612",
|
||||||
|
"subject" => %{"id" => "A1I7be", "state" => "open", "type" => "report"},
|
||||||
|
"subject_actor" => %{
|
||||||
|
"id" => "A1I7G8",
|
||||||
|
"nickname" => "j-612",
|
||||||
|
"type" => "user"
|
||||||
|
},
|
||||||
|
"text" => "fake user"
|
||||||
|
},
|
||||||
|
message: "@admin deleted note 'fake user' from report #A1I7be on user @j-612",
|
||||||
|
time: 1_605_622_400
|
||||||
|
}
|
||||||
|
],
|
||||||
|
total: 2
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
test "renders `report_note_delete` log message", %{log1: log} do
|
||||||
|
assert ModerationLogView.render("show.json", %{log_entry: log}) == %{
|
||||||
|
data: %{
|
||||||
|
"action" => "report_note_delete",
|
||||||
|
"actor" => %{"id" => "A1I7G8", "nickname" => "admin", "type" => "user"},
|
||||||
|
"message" => "@admin deleted note 'mistake' from report #A1I7be on user @b-612",
|
||||||
|
"subject" => %{"id" => "A1I7be", "state" => "open", "type" => "report"},
|
||||||
|
"subject_actor" => %{"id" => "A1I7G8", "nickname" => "b-612", "type" => "user"},
|
||||||
|
"text" => "mistake"
|
||||||
|
},
|
||||||
|
message: "@admin deleted note 'mistake' from report #A1I7be on user @b-612",
|
||||||
|
time: 1_605_622_400
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue