Merge branch 'feature/1455-chat-character-limit' into 'develop'
Feature/1455 chat character limit Closes #1455 See merge request pleroma/pleroma!2034
This commit is contained in:
commit
6cb31edd76
7 changed files with 42 additions and 3 deletions
|
@ -40,6 +40,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
- `:chat_limit` option to limit chat characters.
|
||||||
- Refreshing poll results for remote polls
|
- Refreshing poll results for remote polls
|
||||||
- Authentication: Added rate limit for password-authorized actions / login existence checks
|
- Authentication: Added rate limit for password-authorized actions / login existence checks
|
||||||
- Static Frontend: Add the ability to render user profiles and notices server-side without requiring JS app.
|
- Static Frontend: Add the ability to render user profiles and notices server-side without requiring JS app.
|
||||||
|
|
|
@ -225,6 +225,7 @@ config :pleroma, :instance,
|
||||||
notify_email: "noreply@example.com",
|
notify_email: "noreply@example.com",
|
||||||
description: "A Pleroma instance, an alternative fediverse server",
|
description: "A Pleroma instance, an alternative fediverse server",
|
||||||
limit: 5_000,
|
limit: 5_000,
|
||||||
|
chat_limit: 5_000,
|
||||||
remote_limit: 100_000,
|
remote_limit: 100_000,
|
||||||
upload_limit: 16_000_000,
|
upload_limit: 16_000_000,
|
||||||
avatar_upload_limit: 2_000_000,
|
avatar_upload_limit: 2_000_000,
|
||||||
|
|
|
@ -12,6 +12,7 @@ You shouldn't edit the base config directly to avoid breakages and merge conflic
|
||||||
* `notify_email`: Email used for notifications.
|
* `notify_email`: Email used for notifications.
|
||||||
* `description`: The instance’s description, can be seen in nodeinfo and ``/api/v1/instance``.
|
* `description`: The instance’s description, can be seen in nodeinfo and ``/api/v1/instance``.
|
||||||
* `limit`: Posts character limit (CW/Subject included in the counter).
|
* `limit`: Posts character limit (CW/Subject included in the counter).
|
||||||
|
* `chat_limit`: Character limit of the instance chat messages.
|
||||||
* `remote_limit`: Hard character limit beyond which remote posts will be dropped.
|
* `remote_limit`: Hard character limit beyond which remote posts will be dropped.
|
||||||
* `upload_limit`: File size limit of uploads (except for avatar, background, banner).
|
* `upload_limit`: File size limit of uploads (except for avatar, background, banner).
|
||||||
* `avatar_upload_limit`: File size limit of user’s profile avatars.
|
* `avatar_upload_limit`: File size limit of user’s profile avatars.
|
||||||
|
|
|
@ -147,8 +147,6 @@ defmodule Pleroma.Application do
|
||||||
|
|
||||||
defp oauth_cleanup_child(_), do: []
|
defp oauth_cleanup_child(_), do: []
|
||||||
|
|
||||||
defp chat_child(:test, _), do: []
|
|
||||||
|
|
||||||
defp chat_child(_env, true) do
|
defp chat_child(_env, true) do
|
||||||
[Pleroma.Web.ChatChannel.ChatChannelState]
|
[Pleroma.Web.ChatChannel.ChatChannelState]
|
||||||
end
|
end
|
||||||
|
|
|
@ -20,7 +20,7 @@ defmodule Pleroma.Web.ChatChannel do
|
||||||
def handle_in("new_msg", %{"text" => text}, %{assigns: %{user_name: user_name}} = socket) do
|
def handle_in("new_msg", %{"text" => text}, %{assigns: %{user_name: user_name}} = socket) do
|
||||||
text = String.trim(text)
|
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 = User.get_cached_by_nickname(user_name)
|
||||||
author = Pleroma.Web.MastodonAPI.AccountView.render("show.json", user: author)
|
author = Pleroma.Web.MastodonAPI.AccountView.render("show.json", user: author)
|
||||||
message = ChatChannelState.add_message(%{text: text, author: author})
|
message = ChatChannelState.add_message(%{text: text, author: author})
|
||||||
|
|
|
@ -23,6 +23,7 @@ defmodule Pleroma.Web.ChannelCase do
|
||||||
quote do
|
quote do
|
||||||
# Import conveniences for testing with channels
|
# Import conveniences for testing with channels
|
||||||
use Phoenix.ChannelTest
|
use Phoenix.ChannelTest
|
||||||
|
use Pleroma.Tests.Helpers
|
||||||
|
|
||||||
# The default endpoint for testing
|
# The default endpoint for testing
|
||||||
@endpoint Pleroma.Web.Endpoint
|
@endpoint Pleroma.Web.Endpoint
|
||||||
|
|
37
test/web/chat_channel_test.exs
Normal file
37
test/web/chat_channel_test.exs
Normal file
|
@ -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
|
Loading…
Reference in a new issue