Basic FederatedChatChannel.

This commit is contained in:
lain 2018-10-11 00:09:50 +02:00 committed by William Pitcock
parent d383b54d96
commit c88a9e604f
4 changed files with 50 additions and 1 deletions

View File

@ -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

View File

@ -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

View File

@ -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