diff options
author | rinpatch <rinpatch@sdf.org> | 2020-09-07 16:38:16 +0000 |
---|---|---|
committer | rinpatch <rinpatch@sdf.org> | 2020-09-08 12:51:38 +0300 |
commit | 718c7cc8473282a9239cc125e10b54df7ed5e0fe (patch) | |
tree | bcfe2dd9311c36a8e94130e102dcbad7287c4c23 /lib | |
parent | 73dd5bdb7dcdf804bdbabcf632671d4de5042ebc (diff) | |
download | pleroma-718c7cc8473282a9239cc125e10b54df7ed5e0fe.tar.gz |
Merge branch 'fix/apc2s-limits' into 'develop'
AP C2S: Restrict character limit on Note
Closes #2
See merge request pleroma/secteam/pleroma!9
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/web/activity_pub/activity_pub_controller.ex | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/lib/pleroma/web/activity_pub/activity_pub_controller.ex b/lib/pleroma/web/activity_pub/activity_pub_controller.ex index 220c4fe52..732c44271 100644 --- a/lib/pleroma/web/activity_pub/activity_pub_controller.ex +++ b/lib/pleroma/web/activity_pub/activity_pub_controller.ex @@ -399,21 +399,30 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do defp handle_user_activity( %User{} = user, - %{"type" => "Create", "object" => %{"type" => "Note"}} = params + %{"type" => "Create", "object" => %{"type" => "Note"} = object} = params ) do - object = - params["object"] - |> Map.merge(Map.take(params, ["to", "cc"])) - |> Map.put("attributedTo", user.ap_id()) - |> Transmogrifier.fix_object() - - ActivityPub.create(%{ - to: params["to"], - actor: user, - context: object["context"], - object: object, - additional: Map.take(params, ["cc"]) - }) + content = if is_binary(object["content"]), do: object["content"], else: "" + name = if is_binary(object["name"]), do: object["name"], else: "" + summary = if is_binary(object["summary"]), do: object["summary"], else: "" + length = String.length(content <> name <> summary) + + if length > Pleroma.Config.get([:instance, :limit]) do + {:error, dgettext("errors", "Note is over the character limit")} + else + object = + object + |> Map.merge(Map.take(params, ["to", "cc"])) + |> Map.put("attributedTo", user.ap_id()) + |> Transmogrifier.fix_object() + + ActivityPub.create(%{ + to: params["to"], + actor: user, + context: object["context"], + object: object, + additional: Map.take(params, ["cc"]) + }) + end end defp handle_user_activity(%User{} = user, %{"type" => "Delete"} = params) do |