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 @@ config :pleroma, :instance,
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 @@ config :pleroma, :media_preview_proxy,
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 @@ config :pleroma, :config_description, [
] ]
}, },
%{ %{
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 @@ config :pleroma, :config_description, [
}, },
%{ %{
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 @@ defmodule Pleroma.Web.MastodonAPI.InstanceView 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 @@ defmodule Pleroma.Web.MastodonAPI.InstanceView 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 @@ defmodule Pleroma.Web.ChatChannel do
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 @@ defmodule Pleroma.Config.TransferTaskTest 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 @@ defmodule Pleroma.Config.TransferTaskTest 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 @@ defmodule Pleroma.Web.AdminAPI.ConfigControllerTest 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 @@ defmodule Pleroma.Web.AdminAPI.ConfigControllerTest 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 @@ defmodule Pleroma.Web.AdminAPI.ConfigControllerTest 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 @@ defmodule Pleroma.Web.AdminAPI.ConfigControllerTest 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 @@ defmodule Pleroma.Web.AdminAPI.ConfigControllerTest 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]}]}
] ]
} }
) )
@ -471,7 +471,7 @@ defmodule Pleroma.Web.AdminAPI.ConfigControllerTest do
%{ %{
"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 @@ defmodule Pleroma.Web.MastodonAPI.InstanceControllerTest 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 @@ defmodule Pleroma.Web.ChatChannelTest 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 @@ defmodule Pleroma.Web.ChatChannelTest 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