Browse Source

Emoji Reactions: Actually use the validation.

thumbnail-proxy
lain 4 years ago
parent
commit
a0d9d42eaa
3 changed files with 27 additions and 2 deletions
  1. +5
    -1
      lib/pleroma/web/activity_pub/activity_pub.ex
  2. +19
    -0
      test/web/activity_pub/transmogrifier_test.exs
  3. +3
    -1
      test/web/common_api/common_api_test.exs

+ 5
- 1
lib/pleroma/web/activity_pub/activity_pub.ex View File

@@ -325,12 +325,14 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
def react_with_emoji(user, object, emoji, options \\ []) do
with local <- Keyword.get(options, :local, true),
activity_id <- Keyword.get(options, :activity_id, nil),
Pleroma.Emoji.is_unicode_emoji?(emoji),
true <- Pleroma.Emoji.is_unicode_emoji?(emoji),
reaction_data <- make_emoji_reaction_data(user, object, emoji, activity_id),
{:ok, activity} <- insert(reaction_data, local),
{:ok, object} <- add_emoji_reaction_to_object(activity, object),
:ok <- maybe_federate(activity) do
{:ok, activity, object}
else
e -> {:error, e}
end
end

@@ -345,6 +347,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
{:ok, object} <- remove_emoji_reaction_from_object(reaction_activity, object),
:ok <- maybe_federate(activity) do
{:ok, activity, object}
else
e -> {:error, e}
end
end



+ 19
- 0
test/web/activity_pub/transmogrifier_test.exs View File

@@ -395,6 +395,25 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
assert data["content"] == "👌"
end

test "it reject invalid emoji reactions" do
user = insert(:user)
{:ok, activity} = CommonAPI.post(user, %{"status" => "hello"})

data =
File.read!("test/fixtures/emoji-reaction-too-long.json")
|> Poison.decode!()
|> Map.put("object", activity.data["object"])

assert :error = Transmogrifier.handle_incoming(data)

data =
File.read!("test/fixtures/emoji-reaction-no-emoji.json")
|> Poison.decode!()
|> Map.put("object", activity.data["object"])

assert :error = Transmogrifier.handle_incoming(data)
end

test "it works for incoming emoji reaction undos" do
user = insert(:user)



+ 3
- 1
test/web/common_api/common_api_test.exs View File

@@ -238,7 +238,9 @@ defmodule Pleroma.Web.CommonAPITest do
assert reaction.data["actor"] == user.ap_id
assert reaction.data["content"] == "👍"

# TODO: test error case.
{:ok, activity} = CommonAPI.post(other_user, %{"status" => "cofe"})

{:error, _} = CommonAPI.react_with_emoji(activity.id, user, ".")
end

test "unreacting to a status with an emoji" do


Loading…
Cancel
Save