Skip to content

Commit d2bee7b

Browse files
committed
Use DeviceLink for module namespacing
And add some specs and docs
1 parent a25889f commit d2bee7b

File tree

2 files changed

+29
-13
lines changed

2 files changed

+29
-13
lines changed

lib/nerves_hub/rpc/device_auth.ex renamed to lib/nerves_hub/device_link/connections.ex

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
defmodule NervesHub.RPC.DeviceAuth do
2-
@moduledoc false
1+
defmodule NervesHub.DeviceLink.Connections do
2+
@moduledoc """
3+
Functions for connecting devices, including the reporting of connection availability.
4+
"""
35

46
alias NervesHub.Devices
5-
alias NervesHub.Devices.Connections
7+
alias NervesHub.Devices.Connections, as: DeviceConnections
68
alias NervesHub.Devices.DeviceConnection
79
alias NervesHub.Devices.Device
810
alias NervesHub.Products
@@ -13,6 +15,12 @@ defmodule NervesHub.RPC.DeviceAuth do
1315
# Default 90 seconds max age for the signature
1416
@default_max_hmac_age 90
1517

18+
@type auth() :: {:ssl_certs, any()} | {:shared_secrets, list()}
19+
@type connection_id() :: binary()
20+
21+
@spec connect_device(auth()) :: {:ok, {connection_id(), Device.t()}} | {:error, :invalid_auth}
22+
def connect_device(auth)
23+
1624
def connect_device({:ssl_certs, ssl_cert}) do
1725
X509.Certificate.from_der!(ssl_cert)
1826
|> Devices.get_device_by_x509()
@@ -52,6 +60,9 @@ defmodule NervesHub.RPC.DeviceAuth do
5260
end
5361
end
5462

63+
@spec disconnect_device(any(), Device.t(), connection_id()) :: :ok
64+
def disconnect_device(reason, device, reference_id)
65+
5566
def disconnect_device({:error, {:shutdown, :disconnected}}, device, reference_id) do
5667
:telemetry.execute([:nerves_hub, :devices, :duplicate_connection], %{count: 1}, %{
5768
ref_id: reference_id,
@@ -67,13 +78,18 @@ defmodule NervesHub.RPC.DeviceAuth do
6778
identifier: device.identifier
6879
})
6980

70-
{:ok, _device_connection} = Connections.device_disconnected(reference_id)
81+
{:ok, _device_connection} = DeviceConnections.device_disconnected(reference_id)
7182

7283
Tracker.offline(device)
7384

7485
:ok
7586
end
7687

88+
@spec device_heartbeat(connection_id()) :: :ok
89+
def device_heartbeat(reference_id) do
90+
DeviceConnections.device_heartbeat(reference_id)
91+
end
92+
7793
defp on_connect(%Device{status: :registered} = device) do
7894
Devices.set_as_provisioned!(device)
7995
|> on_connect()
@@ -89,7 +105,7 @@ defmodule NervesHub.RPC.DeviceAuth do
89105
%{}
90106
)
91107

92-
{:ok, %DeviceConnection{id: connection_id}} = Connections.device_connected(device.id)
108+
{:ok, %DeviceConnection{id: connection_id}} = DeviceConnections.device_connected(device.id)
93109

94110
:telemetry.execute([:nerves_hub, :devices, :connect], %{count: 1}, %{
95111
ref_id: connection_id,

lib/nerves_hub_web/channels/device_socket.ex

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@ defmodule NervesHubWeb.DeviceSocket do
44

55
require Logger
66

7-
alias NervesHub.Devices.Connections
8-
9-
alias NervesHub.RPC.DeviceAuth
7+
alias NervesHub.DeviceLink.Connections
108

119
channel("console", NervesHubWeb.ConsoleChannel)
1210
channel("device", NervesHubWeb.DeviceChannel)
@@ -18,7 +16,7 @@ defmodule NervesHubWeb.DeviceSocket do
1816
@decorate with_span("Channels.DeviceSocket.terminate")
1917
def terminate(reason, {_channels_info, socket} = state) do
2018
%{assigns: %{device: device, reference_id: reference_id}} = socket
21-
DeviceAuth.disconnect_device(reason, device, reference_id)
19+
Connections.disconnect_device(reason, device, reference_id)
2220
super(reason, state)
2321
end
2422

@@ -58,10 +56,10 @@ defmodule NervesHubWeb.DeviceSocket do
5856

5957
# Used by Devices connecting with SSL certificates
6058
@impl Phoenix.Socket
61-
@decorate with_span("Channels.DeviceSocket.connect")
59+
@decorate with_span("Channels.DeviceSocket.connect#ssl_cert")
6260
def connect(_params, socket, %{peer_data: %{ssl_cert: ssl_cert}})
6361
when not is_nil(ssl_cert) do
64-
case DeviceAuth.connect_device({:ssl_certs, ssl_cert}) do
62+
case Connections.connect_device({:ssl_certs, ssl_cert}) do
6563
{:ok, ref_and_device} ->
6664
socket_and_assigns(socket, ref_and_device)
6765

@@ -71,10 +69,11 @@ defmodule NervesHubWeb.DeviceSocket do
7169
end
7270

7371
# Used by Devices connecting with HMAC Shared Secrets
74-
@decorate with_span("Channels.DeviceSocket.connect")
72+
@impl Phoenix.Socket
73+
@decorate with_span("Channels.DeviceSocket.connect#shared_secrets")
7574
def connect(_params, socket, %{x_headers: x_headers})
7675
when is_list(x_headers) and length(x_headers) > 0 do
77-
case DeviceAuth.connect_device({:shared_secrets, x_headers}) do
76+
case Connections.connect_device({:shared_secrets, x_headers}) do
7877
{:ok, ref_and_device} ->
7978
socket_and_assigns(socket, ref_and_device)
8079

@@ -83,6 +82,7 @@ defmodule NervesHubWeb.DeviceSocket do
8382
end
8483
end
8584

85+
@impl Phoenix.Socket
8686
def connect(_params, _socket, _connect_info) do
8787
{:error, :no_auth}
8888
end

0 commit comments

Comments
 (0)