Browse Source

AP C2S: Restrict character limit on Note

arm64test
Haelwenn (lanodan) Monnier rinpatch 4 years ago
parent
commit
10ef532c63
2 changed files with 39 additions and 14 deletions
  1. +23
    -14
      lib/pleroma/web/activity_pub/activity_pub_controller.ex
  2. +16
    -0
      test/web/activity_pub/activity_pub_controller_test.exs

+ 23
- 14
lib/pleroma/web/activity_pub/activity_pub_controller.ex View File

@@ -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


+ 16
- 0
test/web/activity_pub/activity_pub_controller_test.exs View File

@@ -905,6 +905,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do
end

describe "POST /users/:nickname/outbox (C2S)" do
setup do: clear_config([:instance, :limit])

setup do
[
activity: %{
@@ -1121,6 +1123,20 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do
assert cirno_object.data["actor"] == cirno.ap_id
assert cirno_object.data["attributedTo"] == cirno.ap_id
end

test "Character limitation", %{conn: conn, activity: activity} do
Pleroma.Config.put([:instance, :limit], 5)
user = insert(:user)

result =
conn
|> assign(:user, user)
|> put_req_header("content-type", "application/activity+json")
|> post("/users/#{user.nickname}/outbox", activity)
|> json_response(400)

assert result == "Note is over the character limit"
end
end

describe "/relay/followers" do


Loading…
Cancel
Save