aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/web/common_api/common_api.ex
diff options
context:
space:
mode:
authorlain <lain@soykaf.club>2019-05-15 16:30:08 +0200
committerlain <lain@soykaf.club>2019-05-15 16:30:08 +0200
commitcbb3451023f557ece773bab20f79ac130f786d01 (patch)
tree1de6243216b216e6fbd32a1f0365d5e98dc4b497 /lib/pleroma/web/common_api/common_api.ex
parent153c15cdb27a0498d00924b34764aeeab8dcbfc6 (diff)
downloadpleroma-cbb3451023f557ece773bab20f79ac130f786d01.tar.gz
CommonAPI: Refactor visibility, forbid public to private replies.
Diffstat (limited to 'lib/pleroma/web/common_api/common_api.ex')
-rw-r--r--lib/pleroma/web/common_api/common_api.ex20
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