diff options
author | Lain Iwakura <lain@soykaf.club> | 2017-12-04 19:10:15 +0100 |
---|---|---|
committer | Lain Iwakura <lain@soykaf.club> | 2017-12-04 19:10:15 +0100 |
commit | 5c4098612067abf16e5c10e878656dc412304cd3 (patch) | |
tree | c0400aaf3e5f51e0c76607ef9b9fbd496533b901 /lib | |
parent | d08a34e88b0d42f403755e1bdbaf015784ebbe74 (diff) | |
download | pleroma-5c4098612067abf16e5c10e878656dc412304cd3.tar.gz |
Basic backend chat.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/web/channels/user_socket.ex | 12 | ||||
-rw-r--r-- | lib/pleroma/web/chat_channel.ex | 14 | ||||
-rw-r--r-- | lib/pleroma/web/twitter_api/twitter_api_controller.ex | 3 | ||||
-rw-r--r-- | lib/pleroma/web/twitter_api/views/user_view.ex | 8 |
4 files changed, 33 insertions, 4 deletions
diff --git a/lib/pleroma/web/channels/user_socket.ex b/lib/pleroma/web/channels/user_socket.ex index 7aa8e556e..d8171cabd 100644 --- a/lib/pleroma/web/channels/user_socket.ex +++ b/lib/pleroma/web/channels/user_socket.ex @@ -1,8 +1,11 @@ defmodule Pleroma.Web.UserSocket do use Phoenix.Socket + alias Pleroma.User + alias Comeonin.Pbkdf2 ## Channels # channel "room:*", Pleroma.Web.RoomChannel + channel "chat:*", Pleroma.Web.ChatChannel ## Transports transport :websocket, Phoenix.Transports.WebSocket @@ -19,8 +22,13 @@ defmodule Pleroma.Web.UserSocket do # # See `Phoenix.Token` documentation for examples in # performing token verification on connect. - def connect(_params, socket) do - {:ok, socket} + 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, user)} + else + _e -> :error + end end # Socket id's are topics that allow you to identify all sockets for a given user: diff --git a/lib/pleroma/web/chat_channel.ex b/lib/pleroma/web/chat_channel.ex new file mode 100644 index 000000000..60558cb8e --- /dev/null +++ b/lib/pleroma/web/chat_channel.ex @@ -0,0 +1,14 @@ +defmodule Pleroma.Web.ChatChannel do + use Phoenix.Channel + + def join("chat:public", _message, socket) do + {:ok, socket} + end + + def handle_in("new_msg", %{"text" => text}, socket) do + author = socket.assigns[:user] + author = Pleroma.Web.MastodonAPI.AccountView.render("account.json", user: author) + broadcast! socket, "new_msg", %{text: text, author: author} + {:noreply, socket} + end +end diff --git a/lib/pleroma/web/twitter_api/twitter_api_controller.ex b/lib/pleroma/web/twitter_api/twitter_api_controller.ex index 1a706029a..73d96c73d 100644 --- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex +++ b/lib/pleroma/web/twitter_api/twitter_api_controller.ex @@ -10,7 +10,8 @@ defmodule Pleroma.Web.TwitterAPI.Controller do require Logger def verify_credentials(%{assigns: %{user: user}} = conn, _params) do - render(conn, UserView, "show.json", %{user: user}) + token = Phoenix.Token.sign(conn, "user socket", user.id) + render(conn, UserView, "show.json", %{user: user, token: token}) end def status_update(%{assigns: %{user: user}} = conn, %{"status" => _} = status_data) do diff --git a/lib/pleroma/web/twitter_api/views/user_view.ex b/lib/pleroma/web/twitter_api/views/user_view.ex index 3dc18eff8..d1c7e6fbd 100644 --- a/lib/pleroma/web/twitter_api/views/user_view.ex +++ b/lib/pleroma/web/twitter_api/views/user_view.ex @@ -25,7 +25,7 @@ defmodule Pleroma.Web.TwitterAPI.UserView do user_info = User.get_cached_user_info(user) - %{ + data = %{ "created_at" => user.inserted_at |> Utils.format_naive_asctime, "description" => HtmlSanitizeEx.strip_tags(user.bio), "favourites_count" => 0, @@ -47,6 +47,12 @@ defmodule Pleroma.Web.TwitterAPI.UserView do "cover_photo" => image_url(user.info["banner"]), "background_image" => image_url(user.info["background"]) } + + if assigns[:token] do + Map.put(data, "token", assigns[:token]) + else + data + end end def render("short.json", %{user: %User{ |