Skip to content

Commit 098ac2a

Browse files
authored
Fix device certificate management in new UI (#2238)
This PR fixes device certificate uploading and deleting in the new UI and adds a test. Solves #2234.
1 parent 439b846 commit 098ac2a

File tree

2 files changed

+21
-17
lines changed

2 files changed

+21
-17
lines changed

lib/nerves_hub_web/components/device_page/settings_tab.ex

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ defmodule NervesHubWeb.Components.DevicePage.SettingsTab do
119119
<div class="flex justify-between items-center h-14 px-4 border-b border-zinc-700">
120120
<div class="text-base text-neutral-50 font-medium">Certificates</div>
121121
<div>
122-
<form phx-change="validate-cert" phx-drop-target={@uploads.certificate.ref}>
122+
<form id="upload-certificate" phx-change="validate-cert" phx-drop-target={@uploads.certificate.ref}>
123123
<div class="flex px-3 py-1.5 gap-2 rounded bg-zinc-800 border border-zinc-600 hover:cursor-pointer">
124124
<svg class="w-5 h-5" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
125125
<path
@@ -173,17 +173,6 @@ defmodule NervesHubWeb.Components.DevicePage.SettingsTab do
173173
<span>Not after:</span>
174174
<span>{Calendar.strftime(certificate.not_after, "%Y-%m-%d")}</span>
175175
</div>
176-
<div class="text-xs text-zinc-400 tracking-wide">
177-
<%!-- <%= Timex.from_now(entry.inserted_at) %> --%>
178-
</div>
179-
<div class="flex items-center">
180-
<svg class="h-0.5 w-0.5" viewBox="0 0 2 2" fill="none" xmlns="http://www.w3.org/2000/svg">
181-
<circle cx="1" cy="1" r="1" fill="#71717A" />
182-
</svg>
183-
</div>
184-
<div class="text-xs text-zinc-400 tracking-wide">
185-
<%!-- <%= Calendar.strftime(entry.inserted_at, "%Y-%m-%d at %I:%M:%S %p UTC") %> --%>
186-
</div>
187176
</div>
188177
</div>
189178
<div class="flex gap-2">
@@ -372,7 +361,7 @@ defmodule NervesHubWeb.Components.DevicePage.SettingsTab do
372361
%{"serial" => serial},
373362
%{assigns: %{device: device}} = socket
374363
) do
375-
certs = device.device_certificates
364+
device = %{device_certificates: certs} = Repo.preload(device, :device_certificates)
376365

377366
with db_cert <- Enum.find(certs, &(&1.serial == serial)),
378367
{:ok, _db_cert} <- Devices.delete_device_certificate(db_cert),
@@ -429,9 +418,9 @@ defmodule NervesHubWeb.Components.DevicePage.SettingsTab do
429418
def hooked_async(_name, _async_fun_result, socket), do: {:cont, socket}
430419

431420
def handle_progress(:certificate, %{done?: true} = entry, socket) do
432-
socket
433-
|> consume_uploaded_entry(entry, &import_cert(socket, &1.path))
434-
|> halt()
421+
socket = consume_uploaded_entry(socket, entry, &import_cert(socket, &1.path))
422+
423+
{:noreply, socket}
435424
end
436425

437426
def handle_progress(:certificate, _entry, socket), do: {:noreply, socket}
@@ -459,7 +448,6 @@ defmodule NervesHubWeb.Components.DevicePage.SettingsTab do
459448
err ->
460449
put_flash(socket, :error, "Unknown file error - #{inspect(err)}")
461450
end
462-
|> halt()
463451
end
464452

465453
defp extensions() do

test/nerves_hub_web/live/new_ui/devices/settings_tab_test.exs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ defmodule NervesHubWeb.NewUi.Devices.SettingsTabTest do
33

44
alias NervesHub.Devices
55
alias NervesHubWeb.Components.Utils
6+
alias NervesHub.Repo
67

78
setup %{conn: conn} do
89
[conn: init_test_session(conn, %{"new_ui" => true})]
@@ -30,5 +31,20 @@ defmodule NervesHubWeb.NewUi.Devices.SettingsTabTest do
3031

3132
assert result.conn.resp_body =~ "-----BEGIN CERTIFICATE-----"
3233
end
34+
35+
test "delete certificate", %{
36+
conn: conn,
37+
org: org,
38+
product: product,
39+
device: device
40+
} do
41+
[certificate] = Devices.get_device_certificates(device)
42+
43+
conn
44+
|> visit("/org/#{org.name}/#{product.name}/devices/#{device.identifier}/settingz")
45+
|> click_button("[phx-click=\"delete-certificate\"]", "")
46+
47+
refute Repo.reload(certificate)
48+
end
3349
end
3450
end

0 commit comments

Comments
 (0)