2018-12-23 21:04:54 +01:00
|
|
|
# Pleroma: A lightweight social networking server
|
2018-12-31 16:41:47 +01:00
|
|
|
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
|
2018-12-23 21:04:54 +01:00
|
|
|
# SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
|
2017-09-09 13:56:51 +02:00
|
|
|
defmodule Pleroma.Web.CommonAPI do
|
2019-02-09 16:16:26 +01:00
|
|
|
alias Pleroma.User
|
|
|
|
alias Pleroma.Repo
|
|
|
|
alias Pleroma.Activity
|
|
|
|
alias Pleroma.Object
|
2019-02-11 12:10:10 +01:00
|
|
|
alias Pleroma.ThreadMute
|
2017-09-09 13:56:51 +02:00
|
|
|
alias Pleroma.Web.ActivityPub.ActivityPub
|
2018-12-14 06:56:49 +01:00
|
|
|
alias Pleroma.Web.ActivityPub.Utils
|
2017-09-15 14:17:36 +02:00
|
|
|
alias Pleroma.Formatter
|
|
|
|
|
|
|
|
import Pleroma.Web.CommonAPI.Utils
|
2017-09-09 13:56:51 +02:00
|
|
|
|
2019-03-03 22:50:00 +01:00
|
|
|
def follow(follower, followed) do
|
|
|
|
with {:ok, follower} <- User.maybe_direct_follow(follower, followed),
|
|
|
|
{:ok, activity} <- ActivityPub.follow(follower, followed),
|
|
|
|
{:ok, follower, followed} <-
|
|
|
|
User.wait_and_refresh(
|
|
|
|
Pleroma.Config.get([:activitypub, :follow_handshake_timeout]),
|
|
|
|
follower,
|
|
|
|
followed
|
|
|
|
) do
|
|
|
|
{:ok, follower, followed, activity}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-09-09 13:56:51 +02:00
|
|
|
def delete(activity_id, user) do
|
|
|
|
with %Activity{data: %{"object" => %{"id" => object_id}}} <- Repo.get(Activity, activity_id),
|
2018-06-18 23:08:12 +02:00
|
|
|
%Object{} = object <- Object.normalize(object_id),
|
2018-11-20 19:15:28 +01:00
|
|
|
true <- user.info.is_moderator || user.ap_id == object.data["actor"],
|
2019-01-11 06:31:31 +01:00
|
|
|
{:ok, _} <- unpin(activity_id, user),
|
2018-11-01 08:29:12 +01:00
|
|
|
{:ok, delete} <- ActivityPub.delete(object) do
|
2017-09-09 13:56:51 +02:00
|
|
|
{:ok, delete}
|
|
|
|
end
|
|
|
|
end
|
2017-09-09 17:48:57 +02:00
|
|
|
|
|
|
|
def repeat(id_or_ap_id, user) do
|
|
|
|
with %Activity{} = activity <- get_by_id_or_ap_id(id_or_ap_id),
|
2018-12-14 06:56:49 +01:00
|
|
|
object <- Object.normalize(activity.data["object"]["id"]),
|
|
|
|
nil <- Utils.get_existing_announce(user.ap_id, object) do
|
2017-09-09 17:48:57 +02:00
|
|
|
ActivityPub.announce(user, object)
|
|
|
|
else
|
|
|
|
_ ->
|
|
|
|
{:error, "Could not repeat"}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2018-04-14 09:39:16 +02:00
|
|
|
def unrepeat(id_or_ap_id, user) do
|
|
|
|
with %Activity{} = activity <- get_by_id_or_ap_id(id_or_ap_id),
|
2018-06-18 23:08:12 +02:00
|
|
|
object <- Object.normalize(activity.data["object"]["id"]) do
|
2018-04-14 09:39:16 +02:00
|
|
|
ActivityPub.unannounce(user, object)
|
|
|
|
else
|
|
|
|
_ ->
|
|
|
|
{:error, "Could not unrepeat"}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-09-09 18:09:37 +02:00
|
|
|
def favorite(id_or_ap_id, user) do
|
|
|
|
with %Activity{} = activity <- get_by_id_or_ap_id(id_or_ap_id),
|
2018-12-14 06:56:49 +01:00
|
|
|
object <- Object.normalize(activity.data["object"]["id"]),
|
|
|
|
nil <- Utils.get_existing_like(user.ap_id, object) do
|
2017-09-09 18:09:37 +02:00
|
|
|
ActivityPub.like(user, object)
|
|
|
|
else
|
|
|
|
_ ->
|
|
|
|
{:error, "Could not favorite"}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-09-09 18:30:02 +02:00
|
|
|
def unfavorite(id_or_ap_id, user) do
|
|
|
|
with %Activity{} = activity <- get_by_id_or_ap_id(id_or_ap_id),
|
2018-06-18 23:08:12 +02:00
|
|
|
object <- Object.normalize(activity.data["object"]["id"]) do
|
2017-09-09 18:30:02 +02:00
|
|
|
ActivityPub.unlike(user, object)
|
|
|
|
else
|
|
|
|
_ ->
|
|
|
|
{:error, "Could not unfavorite"}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2018-03-30 15:01:53 +02:00
|
|
|
def get_visibility(%{"visibility" => visibility})
|
|
|
|
when visibility in ~w{public unlisted private direct},
|
|
|
|
do: visibility
|
|
|
|
|
2018-03-30 12:19:57 +02:00
|
|
|
def get_visibility(%{"in_reply_to_status_id" => status_id}) when not is_nil(status_id) do
|
2018-08-27 00:37:36 +02:00
|
|
|
case get_replied_to_activity(status_id) do
|
|
|
|
nil ->
|
|
|
|
"public"
|
|
|
|
|
|
|
|
inReplyTo ->
|
|
|
|
Pleroma.Web.MastodonAPI.StatusView.get_visibility(inReplyTo.data["object"])
|
|
|
|
end
|
2018-02-18 15:04:26 +01:00
|
|
|
end
|
2018-03-30 15:01:53 +02:00
|
|
|
|
2018-02-18 15:04:26 +01:00
|
|
|
def get_visibility(_), do: "public"
|
|
|
|
|
2017-09-15 14:17:36 +02:00
|
|
|
def post(user, %{"status" => status} = data) do
|
2018-02-18 15:04:26 +01:00
|
|
|
visibility = get_visibility(data)
|
2018-11-06 19:34:57 +01:00
|
|
|
limit = Pleroma.Config.get([:instance, :limit])
|
2018-03-30 15:01:53 +02:00
|
|
|
|
2017-09-15 14:17:36 +02:00
|
|
|
with status <- String.trim(status),
|
2019-01-04 17:27:46 +01:00
|
|
|
attachments <- attachments_from_ids(data),
|
2017-09-15 14:17:36 +02:00
|
|
|
inReplyTo <- get_replied_to_activity(data["in_reply_to_status_id"]),
|
2019-02-27 00:32:26 +01:00
|
|
|
{content_html, mentions, tags} <-
|
2018-09-02 02:14:25 +02:00
|
|
|
make_content_html(
|
|
|
|
status,
|
|
|
|
attachments,
|
2019-02-27 00:32:26 +01:00
|
|
|
data
|
2018-09-02 02:14:25 +02:00
|
|
|
),
|
2019-02-27 00:32:26 +01:00
|
|
|
{to, cc} <- to_for_user_and_mentions(user, mentions, inReplyTo, visibility),
|
2017-09-17 15:21:44 +02:00
|
|
|
context <- make_context(inReplyTo),
|
2017-10-31 19:44:36 +01:00
|
|
|
cw <- data["spoiler_text"],
|
2018-10-10 09:53:20 +02:00
|
|
|
full_payload <- String.trim(status <> (data["spoiler_text"] || "")),
|
2018-11-06 19:34:57 +01:00
|
|
|
length when length in 1..limit <- String.length(full_payload),
|
2018-03-30 15:01:53 +02:00
|
|
|
object <-
|
|
|
|
make_note_data(
|
|
|
|
user.ap_id,
|
|
|
|
to,
|
|
|
|
context,
|
|
|
|
content_html,
|
|
|
|
attachments,
|
|
|
|
inReplyTo,
|
|
|
|
tags,
|
|
|
|
cw,
|
|
|
|
cc
|
|
|
|
),
|
|
|
|
object <-
|
|
|
|
Map.put(
|
|
|
|
object,
|
|
|
|
"emoji",
|
2019-01-05 18:35:39 +01:00
|
|
|
(Formatter.get_emoji(status) ++ Formatter.get_emoji(data["spoiler_text"]))
|
2018-03-30 15:01:53 +02:00
|
|
|
|> Enum.reduce(%{}, fn {name, file}, acc ->
|
|
|
|
Map.put(acc, name, "#{Pleroma.Web.Endpoint.static_url()}#{file}")
|
|
|
|
end)
|
|
|
|
) do
|
|
|
|
res =
|
|
|
|
ActivityPub.create(%{
|
|
|
|
to: to,
|
|
|
|
actor: user,
|
|
|
|
context: context,
|
|
|
|
object: object,
|
2018-12-23 16:26:07 +01:00
|
|
|
additional: %{"cc" => cc, "directMessage" => visibility == "direct"}
|
2018-03-30 15:01:53 +02:00
|
|
|
})
|
|
|
|
|
2017-09-15 14:17:36 +02:00
|
|
|
res
|
2017-09-09 17:48:57 +02:00
|
|
|
end
|
|
|
|
end
|
2018-02-25 21:02:44 +01:00
|
|
|
|
2018-11-20 20:12:39 +01:00
|
|
|
# Updates the emojis for a user based on their profile
|
2018-02-25 21:02:44 +01:00
|
|
|
def update(user) do
|
2018-08-12 21:24:10 +02:00
|
|
|
user =
|
|
|
|
with emoji <- emoji_from_profile(user),
|
2018-11-20 20:12:39 +01:00
|
|
|
source_data <- (user.info.source_data || %{}) |> Map.put("tag", emoji),
|
|
|
|
info_cng <- Pleroma.User.Info.set_source_data(user.info, source_data),
|
|
|
|
change <- Ecto.Changeset.change(user) |> Ecto.Changeset.put_embed(:info, info_cng),
|
2018-08-12 21:24:10 +02:00
|
|
|
{:ok, user} <- User.update_and_set_cache(change) do
|
|
|
|
user
|
|
|
|
else
|
|
|
|
_e ->
|
|
|
|
user
|
|
|
|
end
|
|
|
|
|
2018-03-30 15:01:53 +02:00
|
|
|
ActivityPub.update(%{
|
|
|
|
local: true,
|
|
|
|
to: [user.follower_address],
|
|
|
|
cc: [],
|
|
|
|
actor: user.ap_id,
|
|
|
|
object: Pleroma.Web.ActivityPub.UserView.render("user.json", %{user: user})
|
|
|
|
})
|
2018-02-25 21:02:44 +01:00
|
|
|
end
|
2019-01-07 14:45:33 +01:00
|
|
|
|
2019-01-09 11:40:15 +01:00
|
|
|
def pin(id_or_ap_id, %{ap_id: user_ap_id} = user) do
|
2019-01-30 20:05:27 +01:00
|
|
|
with {_,
|
|
|
|
%Activity{
|
|
|
|
actor: ^user_ap_id,
|
|
|
|
data: %{
|
|
|
|
"type" => "Create"
|
|
|
|
}
|
|
|
|
} = activity} <- {:user_error, get_by_id_or_ap_id(id_or_ap_id)},
|
2019-01-29 18:48:04 +01:00
|
|
|
%Object{data: %{"actor" => ^user_ap_id, "type" => "Note"}} = object <-
|
Refactor pinned posts to use objects instead of activities. Despacito lyrics in the description don't open
Ay
Fonsi
DY
Oh
Oh no, oh no
Oh yeah
Diridiri, dirididi Daddy
Go
Sí, sabes que ya llevo un rato mirándote
Tengo que bailar contigo hoy (DY)
Vi que tu mirada ya estaba llamándome
Muéstrame el camino que yo voy (Oh)
Tú, tú eres el imán y yo soy el metal
Me voy acercando y voy armando el plan
Solo con pensarlo se acelera el pulso (Oh yeah)
Ya, ya me está gustando más de lo normal
Todos mis sentidos van pidiendo más
Esto hay que tomarlo sin ningún apuro
Despacito
Quiero respirar tu cuello despacito
Deja que te diga cosas al oído
Para que te acuerdes si no estás conmigo
Despacito
Quiero desnudarte a besos despacito
Firmo en las paredes de tu laberinto
Y hacer de tu cuerpo todo un manuscrito (sube, sube, sube)
(Sube, sube)
Quiero ver bailar tu pelo
Quiero ser tu ritmo
Que le enseñes a mi boca
Tus lugares favoritos (favoritos, favoritos baby)
Déjame sobrepasar tus zonas de peligro
Hasta provocar tus gritos
Y que olvides tu apellido (Diridiri, dirididi Daddy)
Si te pido un beso ven dámelo
Yo sé que estás pensándolo
Llevo tiempo intentándolo
Mami, esto es dando y dándolo
Sabes que tu corazón conmigo te hace bom, bom
Sabes que esa beba está buscando de mi bom, bom
Ven prueba de mi boca para ver cómo te sabe
Quiero, quiero, quiero ver cuánto amor a ti te cabe
Yo no tengo prisa, yo me quiero dar el viaje
Empecemos lento, después salvaje
Pasito a pasito, suave suavecito
Nos vamos pegando poquito a poquito
Cuando tú me besas con esa destreza
Veo que eres malicia con delicadeza
Pasito a pasito, suave suavecito
Nos vamos pegando, poquito a poquito
Y es que esa belleza es un rompecabezas
Pero pa montarlo aquí tengo la pieza
Despacito
Quiero respirar tu cuello despacito
Deja que te diga cosas al oído
Para que te acuerdes si no estás conmigo
Despacito
Quiero desnudarte a besos despacito
Firmo en las paredes de tu laberinto
Y hacer de tu cuerpo todo un manuscrito (sube, sube, sube)
(Sube, sube)
Quiero ver bailar tu pelo
Quiero ser tu ritmo
Que le enseñes a mi boca
Tus lugares favoritos (favoritos, favoritos baby)
Déjame sobrepasar tus zonas de peligro
Hasta provocar tus gritos
Y que olvides tu apellido
Despacito
Vamos a hacerlo en una playa en Puerto Rico
Hasta que las olas griten "¡ay, bendito!"
Para que mi sello se quede contigo
Pasito a pasito, suave suavecito
Nos vamos pegando, poquito a poquito
Que le enseñes a mi boca
Tus lugares favoritos (favoritos, favoritos baby)
Pasito a pasito, suave suavecito
Nos vamos pegando, poquito a poquito
Hasta provocar tus gritos
Y que olvides tu apellido (DY)
Despacito
2019-01-26 16:29:43 +01:00
|
|
|
Object.normalize(activity.data["object"]),
|
2019-01-29 19:57:53 +01:00
|
|
|
{:ok, _activity, _object} <- ActivityPub.pin(user, object) do
|
2019-01-07 14:45:33 +01:00
|
|
|
{:ok, activity}
|
|
|
|
else
|
2019-01-30 20:05:27 +01:00
|
|
|
{:user_error, _} ->
|
|
|
|
{:error, "Could not pin"}
|
|
|
|
|
2019-01-29 19:57:53 +01:00
|
|
|
e ->
|
|
|
|
e
|
2019-01-07 14:45:33 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def unpin(id_or_ap_id, user) do
|
|
|
|
with %Activity{} = activity <- get_by_id_or_ap_id(id_or_ap_id),
|
Refactor pinned posts to use objects instead of activities. Despacito lyrics in the description don't open
Ay
Fonsi
DY
Oh
Oh no, oh no
Oh yeah
Diridiri, dirididi Daddy
Go
Sí, sabes que ya llevo un rato mirándote
Tengo que bailar contigo hoy (DY)
Vi que tu mirada ya estaba llamándome
Muéstrame el camino que yo voy (Oh)
Tú, tú eres el imán y yo soy el metal
Me voy acercando y voy armando el plan
Solo con pensarlo se acelera el pulso (Oh yeah)
Ya, ya me está gustando más de lo normal
Todos mis sentidos van pidiendo más
Esto hay que tomarlo sin ningún apuro
Despacito
Quiero respirar tu cuello despacito
Deja que te diga cosas al oído
Para que te acuerdes si no estás conmigo
Despacito
Quiero desnudarte a besos despacito
Firmo en las paredes de tu laberinto
Y hacer de tu cuerpo todo un manuscrito (sube, sube, sube)
(Sube, sube)
Quiero ver bailar tu pelo
Quiero ser tu ritmo
Que le enseñes a mi boca
Tus lugares favoritos (favoritos, favoritos baby)
Déjame sobrepasar tus zonas de peligro
Hasta provocar tus gritos
Y que olvides tu apellido (Diridiri, dirididi Daddy)
Si te pido un beso ven dámelo
Yo sé que estás pensándolo
Llevo tiempo intentándolo
Mami, esto es dando y dándolo
Sabes que tu corazón conmigo te hace bom, bom
Sabes que esa beba está buscando de mi bom, bom
Ven prueba de mi boca para ver cómo te sabe
Quiero, quiero, quiero ver cuánto amor a ti te cabe
Yo no tengo prisa, yo me quiero dar el viaje
Empecemos lento, después salvaje
Pasito a pasito, suave suavecito
Nos vamos pegando poquito a poquito
Cuando tú me besas con esa destreza
Veo que eres malicia con delicadeza
Pasito a pasito, suave suavecito
Nos vamos pegando, poquito a poquito
Y es que esa belleza es un rompecabezas
Pero pa montarlo aquí tengo la pieza
Despacito
Quiero respirar tu cuello despacito
Deja que te diga cosas al oído
Para que te acuerdes si no estás conmigo
Despacito
Quiero desnudarte a besos despacito
Firmo en las paredes de tu laberinto
Y hacer de tu cuerpo todo un manuscrito (sube, sube, sube)
(Sube, sube)
Quiero ver bailar tu pelo
Quiero ser tu ritmo
Que le enseñes a mi boca
Tus lugares favoritos (favoritos, favoritos baby)
Déjame sobrepasar tus zonas de peligro
Hasta provocar tus gritos
Y que olvides tu apellido
Despacito
Vamos a hacerlo en una playa en Puerto Rico
Hasta que las olas griten "¡ay, bendito!"
Para que mi sello se quede contigo
Pasito a pasito, suave suavecito
Nos vamos pegando, poquito a poquito
Que le enseñes a mi boca
Tus lugares favoritos (favoritos, favoritos baby)
Pasito a pasito, suave suavecito
Nos vamos pegando, poquito a poquito
Hasta provocar tus gritos
Y que olvides tu apellido (DY)
Despacito
2019-01-26 16:29:43 +01:00
|
|
|
%Object{} = object <- Object.normalize(activity.data["object"]),
|
2019-01-29 18:48:04 +01:00
|
|
|
ActivityPub.unpin(user, object) do
|
2019-01-07 14:45:33 +01:00
|
|
|
{:ok, activity}
|
|
|
|
else
|
Refactor pinned posts to use objects instead of activities. Despacito lyrics in the description don't open
Ay
Fonsi
DY
Oh
Oh no, oh no
Oh yeah
Diridiri, dirididi Daddy
Go
Sí, sabes que ya llevo un rato mirándote
Tengo que bailar contigo hoy (DY)
Vi que tu mirada ya estaba llamándome
Muéstrame el camino que yo voy (Oh)
Tú, tú eres el imán y yo soy el metal
Me voy acercando y voy armando el plan
Solo con pensarlo se acelera el pulso (Oh yeah)
Ya, ya me está gustando más de lo normal
Todos mis sentidos van pidiendo más
Esto hay que tomarlo sin ningún apuro
Despacito
Quiero respirar tu cuello despacito
Deja que te diga cosas al oído
Para que te acuerdes si no estás conmigo
Despacito
Quiero desnudarte a besos despacito
Firmo en las paredes de tu laberinto
Y hacer de tu cuerpo todo un manuscrito (sube, sube, sube)
(Sube, sube)
Quiero ver bailar tu pelo
Quiero ser tu ritmo
Que le enseñes a mi boca
Tus lugares favoritos (favoritos, favoritos baby)
Déjame sobrepasar tus zonas de peligro
Hasta provocar tus gritos
Y que olvides tu apellido (Diridiri, dirididi Daddy)
Si te pido un beso ven dámelo
Yo sé que estás pensándolo
Llevo tiempo intentándolo
Mami, esto es dando y dándolo
Sabes que tu corazón conmigo te hace bom, bom
Sabes que esa beba está buscando de mi bom, bom
Ven prueba de mi boca para ver cómo te sabe
Quiero, quiero, quiero ver cuánto amor a ti te cabe
Yo no tengo prisa, yo me quiero dar el viaje
Empecemos lento, después salvaje
Pasito a pasito, suave suavecito
Nos vamos pegando poquito a poquito
Cuando tú me besas con esa destreza
Veo que eres malicia con delicadeza
Pasito a pasito, suave suavecito
Nos vamos pegando, poquito a poquito
Y es que esa belleza es un rompecabezas
Pero pa montarlo aquí tengo la pieza
Despacito
Quiero respirar tu cuello despacito
Deja que te diga cosas al oído
Para que te acuerdes si no estás conmigo
Despacito
Quiero desnudarte a besos despacito
Firmo en las paredes de tu laberinto
Y hacer de tu cuerpo todo un manuscrito (sube, sube, sube)
(Sube, sube)
Quiero ver bailar tu pelo
Quiero ser tu ritmo
Que le enseñes a mi boca
Tus lugares favoritos (favoritos, favoritos baby)
Déjame sobrepasar tus zonas de peligro
Hasta provocar tus gritos
Y que olvides tu apellido
Despacito
Vamos a hacerlo en una playa en Puerto Rico
Hasta que las olas griten "¡ay, bendito!"
Para que mi sello se quede contigo
Pasito a pasito, suave suavecito
Nos vamos pegando, poquito a poquito
Que le enseñes a mi boca
Tus lugares favoritos (favoritos, favoritos baby)
Pasito a pasito, suave suavecito
Nos vamos pegando, poquito a poquito
Hasta provocar tus gritos
Y que olvides tu apellido (DY)
Despacito
2019-01-26 16:29:43 +01:00
|
|
|
%{errors: [pinned_objects: {err, _}]} ->
|
2019-01-07 14:45:33 +01:00
|
|
|
{:error, err}
|
|
|
|
|
|
|
|
_ ->
|
|
|
|
{:error, "Could not unpin"}
|
|
|
|
end
|
|
|
|
end
|
2019-02-11 11:59:51 +01:00
|
|
|
|
|
|
|
def add_mute(user, activity) do
|
|
|
|
with {:ok, _} <- ThreadMute.add_mute(user.id, activity.data["context"]) do
|
|
|
|
{:ok, activity}
|
|
|
|
else
|
|
|
|
{:error, _} -> {:error, "conversation is already muted"}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def remove_mute(user, activity) do
|
|
|
|
ThreadMute.remove_mute(user.id, activity.data["context"])
|
|
|
|
{:ok, activity}
|
|
|
|
end
|
|
|
|
|
|
|
|
def thread_muted?(%{id: nil} = _user, _activity), do: false
|
|
|
|
|
|
|
|
def thread_muted?(user, activity) do
|
|
|
|
with [] <- ThreadMute.check_muted(user.id, activity.data["context"]) do
|
|
|
|
false
|
|
|
|
else
|
|
|
|
_ -> true
|
|
|
|
end
|
|
|
|
end
|
2019-02-20 17:51:25 +01:00
|
|
|
|
|
|
|
def report(user, data) do
|
|
|
|
with {:account_id, %{"account_id" => account_id}} <- {:account_id, data},
|
|
|
|
{:account, %User{} = account} <- {:account, User.get_by_id(account_id)},
|
2019-02-27 00:32:26 +01:00
|
|
|
{:ok, {content_html, _, _}} <- make_report_content_html(data["comment"]),
|
2019-02-20 17:51:25 +01:00
|
|
|
{:ok, statuses} <- get_report_statuses(account, data),
|
|
|
|
{:ok, activity} <-
|
|
|
|
ActivityPub.flag(%{
|
|
|
|
context: Utils.generate_context_id(),
|
|
|
|
actor: user,
|
|
|
|
account: account,
|
|
|
|
statuses: statuses,
|
|
|
|
content: content_html
|
|
|
|
}) do
|
|
|
|
Enum.each(User.all_superusers(), fn superuser ->
|
|
|
|
superuser
|
|
|
|
|> Pleroma.AdminEmail.report(user, account, statuses, content_html)
|
|
|
|
|> Pleroma.Mailer.deliver_async()
|
|
|
|
end)
|
|
|
|
|
|
|
|
{:ok, activity}
|
|
|
|
else
|
|
|
|
{:error, err} -> {:error, err}
|
|
|
|
{:account_id, %{}} -> {:error, "Valid `account_id` required"}
|
|
|
|
{:account, nil} -> {:error, "Account not found"}
|
|
|
|
end
|
|
|
|
end
|
2017-09-09 13:56:51 +02:00
|
|
|
end
|