X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fpleroma%2Fweb%2Fchannels%2Fuser_socket.ex;h=6503979a170852fbfe6203d99cc9082492f3853a;hb=091baf93169895c62418ccee81b80d00416aaa56;hp=7aa8e556e9eaea19fb7864d1ce162d91b8a139d1;hpb=a93f3421a704d6728a856d5d82cdbf9c43f3f897;p=akkoma diff --git a/lib/pleroma/web/channels/user_socket.ex b/lib/pleroma/web/channels/user_socket.ex index 7aa8e556e..6503979a1 100644 --- a/lib/pleroma/web/channels/user_socket.ex +++ b/lib/pleroma/web/channels/user_socket.ex @@ -1,12 +1,14 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Web.UserSocket do use Phoenix.Socket + alias Pleroma.User ## Channels # channel "room:*", Pleroma.Web.RoomChannel - - ## Transports - transport :websocket, Phoenix.Transports.WebSocket - # transport :longpoll, Phoenix.Transports.LongPoll + channel("chat:*", Pleroma.Web.ChatChannel) # Socket params are passed from the client and can # be used to verify and authenticate a user. After @@ -19,8 +21,14 @@ 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 true <- Pleroma.Config.get([:chat, :enabled]), + {:ok, user_id} <- Phoenix.Token.verify(socket, "user socket", token, max_age: 84_600), + %User{} = user <- Pleroma.User.get_by_id(user_id) do + {:ok, assign(socket, :user_name, user.nickname)} + else + _e -> :error + end end # Socket id's are topics that allow you to identify all sockets for a given user: