aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/web/common_api/common_api.ex
diff options
context:
space:
mode:
authorkaniini <nenolod@gmail.com>2019-05-15 15:26:07 +0000
committerkaniini <nenolod@gmail.com>2019-05-15 15:26:07 +0000
commit18f2d2024daa682cdb02c57eeb4c08d377a9a0a9 (patch)
tree78041b335925750f22126581bacbf03ccf3a17d1 /lib/pleroma/web/common_api/common_api.ex
parent0992094bd6bfca16f92fbc9f7f5f97c3d9088aa6 (diff)
parent7a92e701b974aa5ee70d617be323292c953d08de (diff)
downloadpleroma-18f2d2024daa682cdb02c57eeb4c08d377a9a0a9.tar.gz
Merge branch 'prevent-public-answers' into 'develop'
Prevent public answers to direct messages See merge request pleroma/pleroma!1159
Diffstat (limited to 'lib/pleroma/web/common_api/common_api.ex')
-rw-r--r--lib/pleroma/web/common_api/common_api.ex36
1 files changed, 20 insertions, 16 deletions
diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex
index b53869c75..29c4c1014 100644
--- a/lib/pleroma/web/common_api/common_api.ex
+++ b/lib/pleroma/web/common_api/common_api.ex
@@ -116,32 +116,34 @@ defmodule Pleroma.Web.CommonAPI do
end
end
- def get_visibility(%{"visibility" => visibility})
+ def get_visibility(%{"visibility" => visibility}, in_reply_to)
when visibility in ~w{public unlisted private direct},
- do: visibility
-
- def get_visibility(%{"in_reply_to_status_id" => status_id}) when not is_nil(status_id) do
- case get_replied_to_activity(status_id) do
- nil ->
- "public"
-
- in_reply_to ->
- # XXX: these heuristics should be moved out of MastodonAPI.
- with %Object{} = object <- Object.normalize(in_reply_to) do
- Pleroma.Web.MastodonAPI.StatusView.get_visibility(object)
- end
- end
+ do: {visibility, get_replied_to_visibility(in_reply_to)}
+
+ def get_visibility(_, in_reply_to) when not is_nil(in_reply_to) do
+ visibility = get_replied_to_visibility(in_reply_to)
+ {visibility, visibility}
end
- def get_visibility(_), do: "public"
+ def get_visibility(_, in_reply_to), do: {"public", get_replied_to_visibility(in_reply_to)}
+
+ def get_replied_to_visibility(nil), do: nil
+
+ def get_replied_to_visibility(activity) do
+ with %Object{} = object <- Object.normalize(activity) do
+ Pleroma.Web.ActivityPub.Visibility.get_visibility(object)
+ end
+ end
def post(user, %{"status" => status} = data) do
- visibility = get_visibility(data)
limit = Pleroma.Config.get([:instance, :limit])
with status <- String.trim(status),
attachments <- attachments_from_ids(data),
in_reply_to <- get_replied_to_activity(data["in_reply_to_status_id"]),
+ {visibility, in_reply_to_visibility} <- get_visibility(data, in_reply_to),
+ {_, false} <-
+ {:private_to_public, in_reply_to_visibility == "direct" && visibility != "direct"},
{content_html, mentions, tags} <-
make_content_html(
status,
@@ -185,6 +187,8 @@ defmodule Pleroma.Web.CommonAPI do
)
res
+ else
+ e -> {:error, e}
end
end