@@ -4,10 +4,7 @@ defmodule NervesHubWeb.DeviceSocket do
44
55 require Logger
66
7- alias NervesHub.Devices
87 alias NervesHub.Devices.Connections
9- alias NervesHub.Devices.Device
10- alias NervesHub.Devices.DeviceConnection
118 alias NervesHub.Tracker
129
1310 alias NervesHub.RPC.DeviceAuth
@@ -18,13 +15,6 @@ defmodule NervesHubWeb.DeviceSocket do
1815
1916 defoverridable init: 1 , handle_in: 2 , terminate: 2
2017
21- @ impl Phoenix.Socket.Transport
22- def init ( state_tuple ) do
23- { :ok , { state , socket } } = super ( state_tuple )
24- socket = on_connect ( socket )
25- { :ok , { state , socket } }
26- end
27-
2818 @ impl Phoenix.Socket.Transport
2919 @ decorate with_span ( "Channels.DeviceSocket.terminate" )
3020 def terminate ( reason , { _channels_info , socket } = state ) do
@@ -71,40 +61,25 @@ defmodule NervesHubWeb.DeviceSocket do
7161 @ decorate with_span ( "Channels.DeviceSocket.connect" )
7262 def connect ( _params , socket , % { peer_data: % { ssl_cert: ssl_cert } } )
7363 when not is_nil ( ssl_cert ) do
74- X509.Certificate . from_der! ( ssl_cert )
75- |> Devices . get_device_certificate_by_x509 ( )
76- |> case do
77- { :ok , % { device: % Device { } = device } } ->
78- socket_and_assigns ( socket , Devices . preload_product ( device ) )
64+ case DeviceAuth . connect_device ( { :ssl_certs , ssl_cert } ) do
65+ { :ok , ref_and_device } ->
66+ socket_and_assigns ( socket , ref_and_device )
7967
8068 error ->
81- :telemetry . execute ( [ :nerves_hub , :devices , :invalid_auth ] , % { count: 1 } , % {
82- auth: :cert ,
83- reason: error
84- } )
85-
86- { :error , :invalid_auth }
69+ error
8770 end
8871 end
8972
9073 # Used by Devices connecting with HMAC Shared Secrets
9174 @ decorate with_span ( "Channels.DeviceSocket.connect" )
9275 def connect ( _params , socket , % { x_headers: x_headers } )
9376 when is_list ( x_headers ) and length ( x_headers ) > 0 do
94- headers = Map . new ( x_headers )
95-
9677 case DeviceAuth . connect_device ( { :shared_secrets , x_headers } ) do
97- { :ok , device } ->
98- socket_and_assigns ( socket , Devices . preload_product ( device ) )
78+ { :ok , ref_and_device } ->
79+ socket_and_assigns ( socket , ref_and_device )
9980
10081 error ->
101- :telemetry . execute ( [ :nerves_hub , :devices , :invalid_auth ] , % { count: 1 } , % {
102- auth: :shared_secrets ,
103- reason: error ,
104- product_key: Map . get ( headers , "x-nh-key" , "*empty*" )
105- } )
106-
107- { :error , :invalid_auth }
82+ error
10883 end
10984 end
11085
@@ -126,44 +101,15 @@ defmodule NervesHubWeb.DeviceSocket do
126101 ]
127102 end
128103
129- defp socket_and_assigns ( socket , device ) do
130- # disconnect devices using the same identifier
131- _ = socket . endpoint . broadcast_from ( self ( ) , "device_socket:#{ device . id } " , "disconnect" , % { } )
132-
104+ defp socket_and_assigns ( socket , { ref_id , device } ) do
133105 socket =
134106 socket
135107 |> assign ( :device , device )
108+ |> assign ( :reference_id , ref_id )
136109
137110 { :ok , socket }
138111 end
139112
140- @ decorate with_span ( "Channels.DeviceSocket.on_connect#registered" )
141- defp on_connect ( % { assigns: % { device: % { status: :registered } = device } } = socket ) do
142- socket
143- |> assign ( device: Devices . set_as_provisioned! ( device ) )
144- |> on_connect ( )
145- end
146-
147- @ decorate with_span ( "Channels.DeviceSocket.on_connect#provisioned" )
148- defp on_connect ( % { assigns: % { device: device } } = socket ) do
149- # Report connection and use connection id as reference
150- { :ok , % DeviceConnection { id: connection_id } } =
151- Connections . device_connected ( device . id )
152-
153- :telemetry . execute ( [ :nerves_hub , :devices , :connect ] , % { count: 1 } , % {
154- ref_id: connection_id ,
155- identifier: socket . assigns . device . identifier ,
156- firmware_uuid:
157- get_in ( socket . assigns . device , [ Access . key ( :firmware_metadata ) , Access . key ( :uuid ) ] )
158- } )
159-
160- Tracker . online ( device )
161-
162- socket
163- |> assign ( :device , device )
164- |> assign ( :reference_id , connection_id )
165- end
166-
167113 @ decorate with_span ( "Channels.DeviceSocket.on_disconnect" )
168114 defp on_disconnect ( exit_reason , socket )
169115
0 commit comments