ChatChannel: Ignore messages that are too long.
authorlain <lain@soykaf.club>
Wed, 4 Dec 2019 11:48:34 +0000 (12:48 +0100)
committerlain <lain@soykaf.club>
Wed, 4 Dec 2019 11:48:34 +0000 (12:48 +0100)
config/config.exs
lib/pleroma/application.ex
lib/pleroma/web/chat_channel.ex
test/support/channel_case.ex
test/web/chat_channel_test.exs [new file with mode: 0644]

index b60ffef7dc9c7ad8a3690caf0fd7896d48b75613..4624bded2a8829592fe5c88eac2c12639ab3805a 100644 (file)
@@ -225,6 +225,7 @@ config :pleroma, :instance,
   notify_email: "noreply@example.com",
   description: "A Pleroma instance, an alternative fediverse server",
   limit: 5_000,
+  chat_limit: 5_000,
   remote_limit: 100_000,
   upload_limit: 16_000_000,
   avatar_upload_limit: 2_000_000,
index 9dbd1e26b699130c8b507d794de8191bcef530f7..57462740c086142627c958f3ed21917b5740ae21 100644 (file)
@@ -147,8 +147,6 @@ defmodule Pleroma.Application do
 
   defp oauth_cleanup_child(_), do: []
 
-  defp chat_child(:test, _), do: []
-
   defp chat_child(_env, true) do
     [Pleroma.Web.ChatChannel.ChatChannelState]
   end
index 08841a3e8ca52faf749a51f4cc08761807bfbe4f..840414933463d2d74482ec48b29b62de0402cded 100644 (file)
@@ -20,7 +20,7 @@ defmodule Pleroma.Web.ChatChannel do
   def handle_in("new_msg", %{"text" => text}, %{assigns: %{user_name: user_name}} = socket) do
     text = String.trim(text)
 
-    if String.length(text) > 0 do
+    if String.length(text) in 1..Pleroma.Config.get([:instance, :chat_limit]) do
       author = User.get_cached_by_nickname(user_name)
       author = Pleroma.Web.MastodonAPI.AccountView.render("show.json", user: author)
       message = ChatChannelState.add_message(%{text: text, author: author})
index 466d8986f9b10bb7554466454aad05af1dd90528..4a458584489fa63d1e66be55a0608e37bbb69acc 100644 (file)
@@ -23,6 +23,7 @@ defmodule Pleroma.Web.ChannelCase do
     quote do
       # Import conveniences for testing with channels
       use Phoenix.ChannelTest
+      use Pleroma.Tests.Helpers
 
       # The default endpoint for testing
       @endpoint Pleroma.Web.Endpoint
diff --git a/test/web/chat_channel_test.exs b/test/web/chat_channel_test.exs
new file mode 100644 (file)
index 0000000..68c24a9
--- /dev/null
@@ -0,0 +1,37 @@
+defmodule Pleroma.Web.ChatChannelTest do
+  use Pleroma.Web.ChannelCase
+  alias Pleroma.Web.ChatChannel
+  alias Pleroma.Web.UserSocket
+
+  import Pleroma.Factory
+
+  setup do
+    user = insert(:user)
+
+    {:ok, _, socket} =
+      socket(UserSocket, "", %{user_name: user.nickname})
+      |> subscribe_and_join(ChatChannel, "chat:public")
+
+    {:ok, socket: socket}
+  end
+
+  test "it broadcasts a message", %{socket: socket} do
+    push(socket, "new_msg", %{"text" => "why is tenshi eating a corndog so cute?"})
+    assert_broadcast("new_msg", %{text: "why is tenshi eating a corndog so cute?"})
+  end
+
+  describe "message lengths" do
+    clear_config([:instance, :chat_limit])
+
+    test "it ignores messages of length zero", %{socket: socket} do
+      push(socket, "new_msg", %{"text" => ""})
+      refute_broadcast("new_msg", %{text: ""})
+    end
+
+    test "it ignores messages above a certain length", %{socket: socket} do
+      Pleroma.Config.put([:instance, :chat_limit], 2)
+      push(socket, "new_msg", %{"text" => "123"})
+      refute_broadcast("new_msg", %{text: "123"})
+    end
+  end
+end