diff options
| author | Haelwenn (lanodan) Monnier <contact@hacktivis.me> | 2020-07-07 07:06:29 +0200 | 
|---|---|---|
| committer | rinpatch <rinpatch@sdf.org> | 2020-09-08 20:21:34 +0300 | 
| commit | 10ef532c63431811b3998ed7b14aea21755a2b57 (patch) | |
| tree | 9071a98208b3a9275b61e3df68f3419a3dca1107 /lib | |
| parent | a781ac6ca5b7ab23eea795331db0a3fff406630e (diff) | |
| download | pleroma-10ef532c63431811b3998ed7b14aea21755a2b57.tar.gz pleroma-10ef532c63431811b3998ed7b14aea21755a2b57.zip | |
AP C2S: Restrict character limit on Note
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 | 
