Basic FederatedChatChannel.
This commit is contained in:
parent
d383b54d96
commit
c88a9e604f
|
@ -0,0 +1,15 @@
|
|||
defmodule Pleroma.Web.FederatedChatChannel do
|
||||
use Phoenix.Channel
|
||||
|
||||
def join("federated_chat:room:" <> room_id, params, socket) do
|
||||
{:ok, socket}
|
||||
end
|
||||
|
||||
def join("federated_chat:user:" <> user_id, params, socket) do
|
||||
if user_id == socket.assigns[:user_id] do
|
||||
{:ok, socket}
|
||||
else
|
||||
{:error, %{reason: "unauthorized"}}
|
||||
end
|
||||
end
|
||||
end
|
|
@ -6,6 +6,7 @@ defmodule Pleroma.Web.UserSocket do
|
|||
# channel "room:*", Pleroma.Web.RoomChannel
|
||||
if Application.get_env(:pleroma, :chat) |> Keyword.get(:enabled) do
|
||||
channel("chat:*", Pleroma.Web.ChatChannel)
|
||||
channel("federated_chat:*", Pleroma.Web.FederatedChatChannel)
|
||||
end
|
||||
|
||||
## Transports
|
||||
|
@ -26,7 +27,11 @@ defmodule Pleroma.Web.UserSocket do
|
|||
def connect(%{"token" => token}, socket) do
|
||||
with {:ok, user_id} <- Phoenix.Token.verify(socket, "user socket", token, max_age: 84600),
|
||||
%User{} = user <- Pleroma.Repo.get(User, user_id) do
|
||||
{:ok, assign(socket, :user_name, user.nickname)}
|
||||
socket = socket
|
||||
|> assign(:user_name, user.nickname)
|
||||
|> assign(:user_id, to_string(user.id))
|
||||
|
||||
{:ok, socket}
|
||||
else
|
||||
_e -> :error
|
||||
end
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
defmodule Pleroma.Web.FederatedChatChannelTest do
|
||||
use Pleroma.DataCase
|
||||
|
||||
import Pleroma.Factory
|
||||
alias Pleroma.Web.FederatedChatChannel
|
||||
alias Pleroma.Web.ActivityPub.Chat.Room
|
||||
|
||||
test "it allows joining a user topic for the user itself" do
|
||||
user = insert(:user)
|
||||
other_user = insert(:user)
|
||||
socket = %{assigns: %{user_id: to_string(user.id)}}
|
||||
other_socket = %{assigns: %{user_id: to_string(other_user.id)}}
|
||||
|
||||
topic = "federated_chat:user:#{user.id}"
|
||||
assert {:ok, ^socket} = FederatedChatChannel.join(topic, %{}, socket)
|
||||
|
||||
# Joining as another user will error out
|
||||
assert {:error, %{reason: "unauthorized"}} = FederatedChatChannel.join(topic, %{}, other_socket)
|
||||
end
|
||||
|
||||
test "it allows joining an existing room" do
|
||||
{:ok, room} = Room.create("test_room")
|
||||
socket = %{test: :ok}
|
||||
|
||||
topic = "federated_chat:room:#{room.data["id"]}"
|
||||
|
||||
assert {:ok, ^socket} = FederatedChatChannel.join(topic, %{}, socket)
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue