diff options
author | lain <lain@soykaf.club> | 2019-05-15 16:30:08 +0200 |
---|---|---|
committer | lain <lain@soykaf.club> | 2019-05-15 16:30:08 +0200 |
commit | cbb3451023f557ece773bab20f79ac130f786d01 (patch) | |
tree | 1de6243216b216e6fbd32a1f0365d5e98dc4b497 /lib/pleroma/web/common_api | |
parent | 153c15cdb27a0498d00924b34764aeeab8dcbfc6 (diff) | |
download | pleroma-cbb3451023f557ece773bab20f79ac130f786d01.tar.gz |
CommonAPI: Refactor visibility, forbid public to private replies.
Diffstat (limited to 'lib/pleroma/web/common_api')
-rw-r--r-- | lib/pleroma/web/common_api/common_api.ex | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index b53869c75..c31e56d4c 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -126,22 +126,30 @@ defmodule Pleroma.Web.CommonAPI do "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 + get_replied_to_visibility(in_reply_to) end end def get_visibility(_), do: "public" + 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), + visibility <- get_visibility(data), in_reply_to <- get_replied_to_activity(data["in_reply_to_status_id"]), + in_reply_to_visibility <- get_replied_to_visibility(in_reply_to), + {_, false} <- + {:private_to_public, in_reply_to_visibility == "direct" && visibility != "direct"}, {content_html, mentions, tags} <- make_content_html( status, @@ -185,6 +193,8 @@ defmodule Pleroma.Web.CommonAPI do ) res + else + e -> {:error, e} end end |