Skip to content
Snippets Groups Projects
Commit 5c409861 authored by lain's avatar lain
Browse files

Basic backend chat.

parent d08a34e8
Branches
No related tags found
No related merge requests found
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:
......
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
......@@ -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
......
......@@ -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{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment