Rename the non-federating Chat feature to Shout

This commit is contained in:
Mark Felder 2020-08-03 17:08:35 -05:00 committed by Mark Felder
parent ee52fc840d
commit ff00b354fa
11 changed files with 36 additions and 35 deletions

View file

@ -8,6 +8,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
### Changed ### Changed
- **Breaking:** Configuration: `:chat, enabled` moved to `:shout, enabled` and `:instance, chat_limit` moved to `:instance, shout_limit`
- The `application` metadata returned with statuses is no longer hardcoded. Apps that want to display these details will now have valid data for new posts after this change. - The `application` metadata returned with statuses is no longer hardcoded. Apps that want to display these details will now have valid data for new posts after this change.
- HTTPSecurityPlug now sends a response header to opt out of Google's FLoC (Federated Learning of Cohorts) targeted advertising. - HTTPSecurityPlug now sends a response header to opt out of Google's FLoC (Federated Learning of Cohorts) targeted advertising.
- Email address is now returned if requesting user is the owner of the user account so it can be exposed in client and FE user settings UIs. - Email address is now returned if requesting user is the owner of the user account so it can be exposed in client and FE user settings UIs.

View file

@ -190,7 +190,7 @@
instance_thumbnail: "/instance/thumbnail.jpeg", instance_thumbnail: "/instance/thumbnail.jpeg",
limit: 5_000, limit: 5_000,
description_limit: 5_000, description_limit: 5_000,
chat_limit: 5_000, shout_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,
@ -457,7 +457,7 @@
image_quality: 85, image_quality: 85,
min_content_length: 100 * 1024 min_content_length: 100 * 1024
config :pleroma, :chat, enabled: true config :pleroma, :shoutbox, enabled: true
config :phoenix, :format_encoders, json: Jason config :phoenix, :format_encoders, json: Jason

View file

@ -545,9 +545,9 @@
] ]
}, },
%{ %{
key: :chat_limit, key: :shout_limit,
type: :integer, type: :integer,
description: "Character limit of the instance chat messages", description: "Character limit of the instance shout messages",
suggestions: [ suggestions: [
5_000 5_000
] ]
@ -2652,9 +2652,9 @@
}, },
%{ %{
group: :pleroma, group: :pleroma,
key: :chat, key: :shout,
type: :group, type: :group,
description: "Pleroma chat settings", description: "Pleroma shout settings",
children: [ children: [
%{ %{
key: :enabled, key: :enabled,

View file

@ -16,7 +16,7 @@ defmodule Pleroma.Config.TransferTask do
defp reboot_time_keys, defp reboot_time_keys,
do: [ do: [
{:pleroma, :hackney_pools}, {:pleroma, :hackney_pools},
{:pleroma, :chat}, {:pleroma, :shout},
{:pleroma, Oban}, {:pleroma, Oban},
{:pleroma, :rate_limit}, {:pleroma, :rate_limit},
{:pleroma, :markup}, {:pleroma, :markup},

View file

@ -8,7 +8,7 @@ defmodule Pleroma.Web.UserSocket do
## Channels ## Channels
# channel "room:*", Pleroma.Web.RoomChannel # channel "room:*", Pleroma.Web.RoomChannel
channel("chat:*", Pleroma.Web.ChatChannel) channel("shout:*", Pleroma.Web.ShoutChannel)
# Socket params are passed from the client and can # Socket params are passed from the client and can
# be used to verify and authenticate a user. After # be used to verify and authenticate a user. After
@ -22,7 +22,7 @@ defmodule Pleroma.Web.UserSocket do
# See `Phoenix.Token` documentation for examples in # See `Phoenix.Token` documentation for examples in
# performing token verification on connect. # performing token verification on connect.
def connect(%{"token" => token}, socket) do def connect(%{"token" => token}, socket) do
with true <- Pleroma.Config.get([:chat, :enabled]), with true <- Pleroma.Config.get([:shout, :enabled]),
{:ok, user_id} <- Phoenix.Token.verify(socket, "user socket", token, max_age: 84_600), {:ok, user_id} <- Phoenix.Token.verify(socket, "user socket", token, max_age: 84_600),
%User{} = user <- Pleroma.User.get_cached_by_id(user_id) do %User{} = user <- Pleroma.User.get_cached_by_id(user_id) do
{:ok, assign(socket, :user_name, user.nickname)} {:ok, assign(socket, :user_name, user.nickname)}

View file

@ -37,7 +37,7 @@ def render("show.json", _) do
background_upload_limit: Keyword.get(instance, :background_upload_limit), background_upload_limit: Keyword.get(instance, :background_upload_limit),
banner_upload_limit: Keyword.get(instance, :banner_upload_limit), banner_upload_limit: Keyword.get(instance, :banner_upload_limit),
background_image: Pleroma.Web.Endpoint.url() <> Keyword.get(instance, :background_image), background_image: Pleroma.Web.Endpoint.url() <> Keyword.get(instance, :background_image),
chat_limit: Keyword.get(instance, :chat_limit), shout_limit: Keyword.get(instance, :shout_limit),
description_limit: Keyword.get(instance, :description_limit), description_limit: Keyword.get(instance, :description_limit),
pleroma: %{ pleroma: %{
metadata: %{ metadata: %{
@ -69,8 +69,8 @@ def features do
if Config.get([:gopher, :enabled]) do if Config.get([:gopher, :enabled]) do
"gopher" "gopher"
end, end,
if Config.get([:chat, :enabled]) do if Config.get([:shout, :enabled]) do
"chat" "shout"
end, end,
if Config.get([:instance, :allow_relay]) do if Config.get([:instance, :allow_relay]) do
"relay" "relay"

View file

@ -2,31 +2,31 @@
# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/> # Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.ChatChannel do defmodule Pleroma.Web.ShoutChannel do
use Phoenix.Channel use Phoenix.Channel
alias Pleroma.User alias Pleroma.User
alias Pleroma.Web.ChatChannel.ChatChannelState
alias Pleroma.Web.MastodonAPI.AccountView alias Pleroma.Web.MastodonAPI.AccountView
alias Pleroma.Web.ShoutChannel.ShoutChannelState
def join("chat:public", _message, socket) do def join("shout:public", _message, socket) do
send(self(), :after_join) send(self(), :after_join)
{:ok, socket} {:ok, socket}
end end
def handle_info(:after_join, socket) do def handle_info(:after_join, socket) do
push(socket, "messages", %{messages: ChatChannelState.messages()}) push(socket, "messages", %{messages: ShoutChannelState.messages()})
{:noreply, socket} {:noreply, socket}
end end
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) in 1..Pleroma.Config.get([:instance, :chat_limit]) do if String.length(text) in 1..Pleroma.Config.get([:instance, :shout_limit]) do
author = User.get_cached_by_nickname(user_name) author = User.get_cached_by_nickname(user_name)
author_json = AccountView.render("show.json", user: author, skip_visibility_check: true) author_json = AccountView.render("show.json", user: author, skip_visibility_check: true)
message = ChatChannelState.add_message(%{text: text, author: author_json}) message = ShoutChannelState.add_message(%{text: text, author: author_json})
broadcast!(socket, "new_msg", message) broadcast!(socket, "new_msg", message)
end end
@ -35,7 +35,7 @@ def handle_in("new_msg", %{"text" => text}, %{assigns: %{user_name: user_name}}
end end
end end
defmodule Pleroma.Web.ChatChannel.ChatChannelState do defmodule Pleroma.Web.ShoutChannel.ShoutChannelState do
use Agent use Agent
@max_messages 20 @max_messages 20

View file

@ -93,8 +93,8 @@ test "don't restart if no reboot time settings were changed" do
end end
test "on reboot time key" do test "on reboot time key" do
clear_config(:chat) clear_config(:shout)
insert(:config, key: :chat, value: [enabled: false]) insert(:config, key: :shout, value: [enabled: false])
assert capture_log(fn -> TransferTask.start_link([]) end) =~ "pleroma restarted" assert capture_log(fn -> TransferTask.start_link([]) end) =~ "pleroma restarted"
end end
@ -105,10 +105,10 @@ test "on reboot time subkey" do
end end
test "don't restart pleroma on reboot time key and subkey if there is false flag" do test "don't restart pleroma on reboot time key and subkey if there is false flag" do
clear_config(:chat) clear_config(:shout)
clear_config(Pleroma.Captcha) clear_config(Pleroma.Captcha)
insert(:config, key: :chat, value: [enabled: false]) insert(:config, key: :shout, value: [enabled: false])
insert(:config, key: Pleroma.Captcha, value: [seconds_valid: 60]) insert(:config, key: Pleroma.Captcha, value: [seconds_valid: 60])
refute String.contains?( refute String.contains?(

View file

@ -409,7 +409,7 @@ test "saving config with partial update", %{conn: conn} do
end end
test "saving config which need pleroma reboot", %{conn: conn} do test "saving config which need pleroma reboot", %{conn: conn} do
clear_config([:chat, :enabled], true) clear_config([:shout, :enabled], true)
assert conn assert conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
@ -417,7 +417,7 @@ test "saving config which need pleroma reboot", %{conn: conn} do
"/api/pleroma/admin/config", "/api/pleroma/admin/config",
%{ %{
configs: [ configs: [
%{group: ":pleroma", key: ":chat", value: [%{"tuple" => [":enabled", true]}]} %{group: ":pleroma", key: ":shout", value: [%{"tuple" => [":enabled", true]}]}
] ]
} }
) )
@ -426,7 +426,7 @@ test "saving config which need pleroma reboot", %{conn: conn} do
%{ %{
"db" => [":enabled"], "db" => [":enabled"],
"group" => ":pleroma", "group" => ":pleroma",
"key" => ":chat", "key" => ":shout",
"value" => [%{"tuple" => [":enabled", true]}] "value" => [%{"tuple" => [":enabled", true]}]
} }
], ],
@ -454,7 +454,7 @@ test "saving config which need pleroma reboot", %{conn: conn} do
end end
test "update setting which need reboot, don't change reboot flag until reboot", %{conn: conn} do test "update setting which need reboot, don't change reboot flag until reboot", %{conn: conn} do
clear_config([:chat, :enabled], true) clear_config([:shout, :enabled], true)
assert conn assert conn
|> put_req_header("content-type", "application/json") |> put_req_header("content-type", "application/json")
@ -462,7 +462,7 @@ test "update setting which need reboot, don't change reboot flag until reboot",
"/api/pleroma/admin/config", "/api/pleroma/admin/config",
%{ %{
configs: [ configs: [
%{group: ":pleroma", key: ":chat", value: [%{"tuple" => [":enabled", true]}]} %{group: ":pleroma", key: ":shout", value: [%{"tuple" => [":enabled", true]}]}
] ]
} }
) )
@ -471,7 +471,7 @@ test "update setting which need reboot, don't change reboot flag until reboot",
%{ %{
"db" => [":enabled"], "db" => [":enabled"],
"group" => ":pleroma", "group" => ":pleroma",
"key" => ":chat", "key" => ":shout",
"value" => [%{"tuple" => [":enabled", true]}] "value" => [%{"tuple" => [":enabled", true]}]
} }
], ],

View file

@ -38,7 +38,7 @@ test "get instance information", %{conn: conn} do
"background_upload_limit" => _, "background_upload_limit" => _,
"banner_upload_limit" => _, "banner_upload_limit" => _,
"background_image" => from_config_background, "background_image" => from_config_background,
"chat_limit" => _, "shout_limit" => _,
"description_limit" => _ "description_limit" => _
} = result } = result

View file

@ -2,9 +2,9 @@
# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/> # Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.ChatChannelTest do defmodule Pleroma.Web.ShoutChannelTest do
use Pleroma.Web.ChannelCase use Pleroma.Web.ChannelCase
alias Pleroma.Web.ChatChannel alias Pleroma.Web.ShoutChannel
alias Pleroma.Web.UserSocket alias Pleroma.Web.UserSocket
import Pleroma.Factory import Pleroma.Factory
@ -14,7 +14,7 @@ defmodule Pleroma.Web.ChatChannelTest do
{:ok, _, socket} = {:ok, _, socket} =
socket(UserSocket, "", %{user_name: user.nickname}) socket(UserSocket, "", %{user_name: user.nickname})
|> subscribe_and_join(ChatChannel, "chat:public") |> subscribe_and_join(ShoutChannel, "shout:public")
{:ok, socket: socket} {:ok, socket: socket}
end end
@ -25,7 +25,7 @@ test "it broadcasts a message", %{socket: socket} do
end end
describe "message lengths" do describe "message lengths" do
setup do: clear_config([:instance, :chat_limit]) setup do: clear_config([:instance, :shout_limit])
test "it ignores messages of length zero", %{socket: socket} do test "it ignores messages of length zero", %{socket: socket} do
push(socket, "new_msg", %{"text" => ""}) push(socket, "new_msg", %{"text" => ""})
@ -33,7 +33,7 @@ test "it ignores messages of length zero", %{socket: socket} do
end end
test "it ignores messages above a certain length", %{socket: socket} do test "it ignores messages above a certain length", %{socket: socket} do
clear_config([:instance, :chat_limit], 2) Pleroma.Config.put([:instance, :shout_limit], 2)
push(socket, "new_msg", %{"text" => "123"}) push(socket, "new_msg", %{"text" => "123"})
refute_broadcast("new_msg", %{text: "123"}) refute_broadcast("new_msg", %{text: "123"})
end end