aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorLain Iwakura <lain@soykaf.club>2017-12-04 19:10:15 +0100
committerLain Iwakura <lain@soykaf.club>2017-12-04 19:10:15 +0100
commit5c4098612067abf16e5c10e878656dc412304cd3 (patch)
treec0400aaf3e5f51e0c76607ef9b9fbd496533b901 /lib
parentd08a34e88b0d42f403755e1bdbaf015784ebbe74 (diff)
downloadpleroma-5c4098612067abf16e5c10e878656dc412304cd3.tar.gz
Basic backend chat.
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/web/channels/user_socket.ex12
-rw-r--r--lib/pleroma/web/chat_channel.ex14
-rw-r--r--lib/pleroma/web/twitter_api/twitter_api_controller.ex3
-rw-r--r--lib/pleroma/web/twitter_api/views/user_view.ex8
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{