defmodule Localiser.Web.UserSocket do use Phoenix.Socket channel "particles:*", Localiser.Web.Channels.ParticlesChannel channel "rooms:occupancy", Localiser.Web.Channels.RoomChannel channel "sensors", Localiser.Web.Channels.SensorsChannel @impl true def connect(%{"token" => token}, socket, _connect_info) do case Localiser.Web.Token.verify_token(token) do {:ok, %{"sub" => user_id}} -> case Localiser.Domain.Users.get_user(user_id) do {:ok, user} -> {:ok, assign(socket, :current_user, user)} _ -> :error end {:error, _} -> :error end end def connect(_params, _socket, _connect_info), do: :error @impl true def id(socket), do: "user_socket:#{socket.assigns.current_user.id}" end