Packages
Development utilities for Nerves devices.
Retired package: Deprecated - All functionality is now bundled with the VSCode extension.
Current section
Files
Jump to
Current section
Files
lib/nerves_dev_server_web/socket.ex
defmodule NervesDevServerWeb.Socket do
@moduledoc false
use Phoenix.Socket
require Logger
channel "code", NervesDevServerWeb.Channels.CodeChannel
channel "telemetry", NervesDevServerWeb.Channels.TelemetryChannel
@impl Phoenix.Socket
@spec connect(any(), Phoenix.Socket.t(), any()) :: {:ok, Phoenix.Socket.t()} | {:error, map()}
def connect(params, socket, _connect_info) do
case check_token(params["token"], NervesDevServer.token_secret()) do
:ok ->
{:ok, assign(socket, :conn_id, System.unique_integer([:positive]))}
{:error, reason} ->
Logger.warning("[NervesDevServer] Rejected websocket connection: #{inspect(reason)}")
{:error, %{"reason" => reason}}
end
end
@impl Phoenix.Socket
def id(socket) do
"socket:#{socket.assigns.conn_id}"
end
defp check_token(_, false), do: :ok
defp check_token(nil, _), do: {:error, :auth_required}
defp check_token(token, secret) do
case Phoenix.Token.verify(secret, "user socket", token, max_age: 120) do
{:ok, _} -> :ok
{:error, reason} -> {:error, reason}
end
end
end