Current section
Files
Jump to
Current section
Files
lib/glific_web/channels/user_socket.ex
defmodule GlificWeb.UserSocket do
@moduledoc false
use Absinthe.GraphqlWS.Socket, schema: GlificWeb.Schema
require Logger
alias GlificWeb.APIAuthPlug
# create pow_config for authentication
@pow_config otp_app: :glific
@impl true
def handle_init(%{"authToken" => token}, socket) do
%Plug.Conn{secret_key_base: socket.endpoint.config(:secret_key_base)}
|> APIAuthPlug.get_credentials(token, @pow_config)
|> case do
nil ->
:error
{user, metadata} ->
Logger.info("Verifying tokens: user_id: '#{user.id}'")
fingerprint = Keyword.fetch!(metadata, :fingerprint)
socket =
socket
|> assign(:assigns, fingerprint)
|> assign(:assigns, user)
|> assign_context(current_user: user)
Glific.Repo.put_current_user(user)
Glific.Repo.put_organization_id(user.organization_id)
{:ok, %{name: user.name}, socket}
end
end
# This function will be called when there was no authentication information
def handle_init(_params, _socket), do: :error
end