diff --git a/elixir/apps/web/lib/web/components/core_components.ex b/elixir/apps/web/lib/web/components/core_components.ex index 6c967bcba..8707f19a7 100644 --- a/elixir/apps/web/lib/web/components/core_components.ex +++ b/elixir/apps/web/lib/web/components/core_components.ex @@ -226,7 +226,7 @@ defmodule Web.CoreComponents do -

+

<%= render_slot(help) %>

@@ -714,7 +714,11 @@ defmodule Web.CoreComponents do assigns = assign_new(assigns, :relative_to, fn -> DateTime.utc_now() end) ~H""" - + <%= Cldr.DateTime.Relative.to_string!(@datetime, Web.CLDR, relative_to: @relative_to) %> @@ -737,7 +741,7 @@ defmodule Web.CoreComponents do title={ if @schema.last_seen_at, do: - "Last seen #{Cldr.DateTime.Relative.to_string!(@schema.last_seen_at, Web.CLDR, relative_to: @relative_to)}", + "Last connected #{Cldr.DateTime.Relative.to_string!(@schema.last_seen_at, Web.CLDR, relative_to: @relative_to)}", else: "Never connected" } > diff --git a/elixir/apps/web/lib/web/live/actors/index.ex b/elixir/apps/web/lib/web/live/actors/index.ex index 17b0580cf..962841345 100644 --- a/elixir/apps/web/lib/web/live/actors/index.ex +++ b/elixir/apps/web/lib/web/live/actors/index.ex @@ -54,7 +54,7 @@ defmodule Web.Actors.Index do <:help> - Actors are the people and services that can access your resources. + Actors are the people and services that can access your Resources. <:content> <.flash_group flash={@flash} /> diff --git a/elixir/apps/web/lib/web/live/clients/index.ex b/elixir/apps/web/lib/web/live/clients/index.ex index 1121860eb..c9dcb55e3 100644 --- a/elixir/apps/web/lib/web/live/clients/index.ex +++ b/elixir/apps/web/lib/web/live/clients/index.ex @@ -47,6 +47,9 @@ defmodule Web.Clients.Index do <:title> Clients + <:help> + Clients are end-user devices and servers that access your protected Resources. + <:content> <.flash_group flash={@flash} /> <.live_table diff --git a/elixir/apps/web/lib/web/live/clients/show.ex b/elixir/apps/web/lib/web/live/clients/show.ex index 0a3132949..7a6e7d2f4 100644 --- a/elixir/apps/web/lib/web/live/clients/show.ex +++ b/elixir/apps/web/lib/web/live/clients/show.ex @@ -133,13 +133,13 @@ defmodule Web.Clients.Show do <.vertical_table_row> - <:label>Last Seen + <:label>Last Connected <:value> <.relative_datetime datetime={@client.last_seen_at} /> <.vertical_table_row> - <:label>Last Seen Remote IP + <:label>Last Remote IP <:value> <.last_seen schema={@client} /> diff --git a/elixir/apps/web/lib/web/live/gateways/show.ex b/elixir/apps/web/lib/web/live/gateways/show.ex index b1baed6eb..81fc50abd 100644 --- a/elixir/apps/web/lib/web/live/gateways/show.ex +++ b/elixir/apps/web/lib/web/live/gateways/show.ex @@ -66,14 +66,14 @@ defmodule Web.Gateways.Show do <.vertical_table_row> <:label> - Last seen + Last Connected <:value> <.relative_datetime datetime={@gateway.last_seen_at} /> <.vertical_table_row> - <:label>Last Seen Remote IP + <:label>Last Remote IP <:value> <.last_seen schema={@gateway} /> diff --git a/elixir/apps/web/lib/web/live/groups/index.ex b/elixir/apps/web/lib/web/live/groups/index.ex index b53929c8f..e1ed7b195 100644 --- a/elixir/apps/web/lib/web/live/groups/index.ex +++ b/elixir/apps/web/lib/web/live/groups/index.ex @@ -52,6 +52,9 @@ defmodule Web.Groups.Index do Add Group + <:help> + Groups organize Actors and form the basis of the Firezone access control model. + <:content> <.flash_group flash={@flash} /> <.live_table @@ -95,8 +98,8 @@ defmodule Web.Groups.Index do - <:col :let={group} field={{:groups, :inserted_at}} label="SOURCE"> - <.created_by account={@account} schema={group} /> + <:col :let={group} field={{:groups, :inserted_at}} label="Created"> + <.relative_datetime datetime={group.inserted_at} /> <:empty>
diff --git a/elixir/apps/web/lib/web/live/policies/index.ex b/elixir/apps/web/lib/web/live/policies/index.ex index 1d8e2e3b6..9fa69831f 100644 --- a/elixir/apps/web/lib/web/live/policies/index.ex +++ b/elixir/apps/web/lib/web/live/policies/index.ex @@ -50,6 +50,9 @@ defmodule Web.Policies.Index do Add Policy + <:help> + Policies grant access to Resources. + <:content> <.flash_group flash={@flash} /> <.live_table diff --git a/elixir/apps/web/lib/web/live/relays/show.ex b/elixir/apps/web/lib/web/live/relays/show.ex index 9323518ff..2304c018c 100644 --- a/elixir/apps/web/lib/web/live/relays/show.ex +++ b/elixir/apps/web/lib/web/live/relays/show.ex @@ -83,7 +83,7 @@ defmodule Web.Relays.Show do <.vertical_table_row> <:label> - Last seen + Last Connected <:value> <.relative_datetime datetime={@relay.last_seen_at} /> diff --git a/elixir/apps/web/lib/web/live/resources/index.ex b/elixir/apps/web/lib/web/live/resources/index.ex index 0e762d1a5..c7b8e6667 100644 --- a/elixir/apps/web/lib/web/live/resources/index.ex +++ b/elixir/apps/web/lib/web/live/resources/index.ex @@ -54,8 +54,8 @@ defmodule Web.Resources.Index do Resources <:help> - Resources define the subnets, hosts, and applications for which you want to manage access. You can manage resources per site - in the <.link navigate={~p"/#{@account}/sites"} class={link_style()}>sites section. + Resources define the subnets, hosts, and applications for which you want to manage access. You can manage Resources per Site + in the <.link navigate={~p"/#{@account}/sites"} class={link_style()}>Sites section. <:action> <.add_button @@ -100,12 +100,12 @@ defmodule Web.Resources.Index do <:col :let={resource} label="Authorized groups"> <.peek peek={Map.fetch!(@resource_actor_groups_peek, resource.id)}> <:empty> - None, + None - <.link class={["px-1", link_style()]} navigate={~p"/#{@account}/policies/new?resource_id=#{resource}"} > - create a Policy + Create a Policy to grant access. diff --git a/elixir/apps/web/lib/web/live/settings/dns.ex b/elixir/apps/web/lib/web/live/settings/dns.ex index a6e43447c..b902af249 100644 --- a/elixir/apps/web/lib/web/live/settings/dns.ex +++ b/elixir/apps/web/lib/web/live/settings/dns.ex @@ -33,20 +33,18 @@ defmodule Web.Settings.DNS do <:title> DNS + <:help> + Configure the default resolver used by connected Clients in your Firezone account. + Queries for defined Resources will always + use Firezone's internal DNS. + All other queries will use the resolver below if configured. + If no resolver is configured, the client's default system resolver will be used. + <.website_link href="/kb/deploy/dns"> + Read more about configuring DNS in Firezone. + + <:content> -

- Configure the default resolver used by connected Clients in your Firezone account. Queries for - defined Resources will always - use Firezone's internal DNS. All other queries will - use the resolver below if configured. If no resolver is configured, the client's default system - resolver will be used. -

-

- <.website_link href="/kb/deploy/dns"> - Read more about configuring DNS in Firezone. - -

-
+
<.flash kind={:success} flash={@flash} phx-click="lv:clear-flash" />

Client DNS

diff --git a/elixir/apps/web/lib/web/live/sites/index.ex b/elixir/apps/web/lib/web/live/sites/index.ex index 5e8c41a89..017f43463 100644 --- a/elixir/apps/web/lib/web/live/sites/index.ex +++ b/elixir/apps/web/lib/web/live/sites/index.ex @@ -54,6 +54,11 @@ defmodule Web.Sites.Index do Add Site + + <:help> + Sites represent a shared network environment that Gateways and Resources exist within. + + <:content> <.flash_group flash={@flash} /> <.live_table @@ -112,7 +117,10 @@ defmodule Web.Sites.Index do peek = %{count: length(gateways), items: Enum.take(gateways, 5)} %> <.peek peek={peek}> <:empty> - None + <.icon + name="hero-exclamation-triangle" + class="inline-block w-5 h-5 mr-1 text-red-500" + /> None <:separator> diff --git a/elixir/apps/web/lib/web/live/sites/show.ex b/elixir/apps/web/lib/web/live/sites/show.ex index 9c663948b..515f3cca3 100644 --- a/elixir/apps/web/lib/web/live/sites/show.ex +++ b/elixir/apps/web/lib/web/live/sites/show.ex @@ -220,17 +220,19 @@ defmodule Web.Sites.Show do <:col :let={resource} label="ADDRESS" field={{:resources, :address}}> - <%= resource.address %> + + <%= resource.address %> + <:col :let={resource} label="Authorized groups"> <.peek peek={Map.fetch!(@resource_actor_groups_peek, resource.id)}> <:empty> - None, + None - <.link class={["px-1", link_style()]} navigate={~p"/#{@account}/policies/new?resource_id=#{resource}&site_id=#{@group}"} > - create a Policy + Create a Policy to grant access. diff --git a/elixir/apps/web/test/web/live/clients/show_test.exs b/elixir/apps/web/test/web/live/clients/show_test.exs index 7b8cebe0e..22bdb378d 100644 --- a/elixir/apps/web/test/web/live/clients/show_test.exs +++ b/elixir/apps/web/test/web/live/clients/show_test.exs @@ -91,8 +91,8 @@ defmodule Web.Live.Clients.ShowTest do assert table["owner"] =~ actor.name assert table["status"] =~ "Offline" assert table["created"] - assert table["last seen"] - assert table["last seen remote ip"] =~ to_string(client.last_seen_remote_ip) + assert table["last connected"] + assert table["last remote ip"] =~ to_string(client.last_seen_remote_ip) assert table["client version"] =~ client.last_seen_version assert table["user agent"] =~ client.last_seen_user_agent end diff --git a/elixir/apps/web/test/web/live/gateways/show_test.exs b/elixir/apps/web/test/web/live/gateways/show_test.exs index 9bbe42fca..888117f27 100644 --- a/elixir/apps/web/test/web/live/gateways/show_test.exs +++ b/elixir/apps/web/test/web/live/gateways/show_test.exs @@ -89,8 +89,8 @@ defmodule Web.Live.Gateways.ShowTest do assert table["site"] =~ gateway.group.name assert table["name"] =~ gateway.name - assert table["last seen"] - assert table["last seen remote ip"] =~ to_string(gateway.last_seen_remote_ip) + assert table["last connected"] + assert table["last remote ip"] =~ to_string(gateway.last_seen_remote_ip) assert table["status"] =~ "Offline" assert table["user agent"] =~ gateway.last_seen_user_agent assert table["version"] =~ gateway.last_seen_version diff --git a/elixir/apps/web/test/web/live/groups/index_test.exs b/elixir/apps/web/test/web/live/groups/index_test.exs index bbe8d6e0d..c3dc3eac0 100644 --- a/elixir/apps/web/test/web/live/groups/index_test.exs +++ b/elixir/apps/web/test/web/live/groups/index_test.exs @@ -117,16 +117,12 @@ defmodule Web.Live.Groups.IndexTest do |> render() |> table_to_map() |> with_table_row("name", empty_group.name, fn row -> - empty_group = Repo.preload(empty_group, created_by_identity: :actor) - assert row["actors"] == "None" - assert row["source"] =~ "by #{empty_group.created_by_identity.actor.name}" + assert around_now?(row["created"]) end) |> with_table_row("name", group_with_few_preloads.name, fn row -> - group_with_few_preloads = Repo.preload(group_with_few_preloads, created_by_identity: :actor) - assert row["actors"] == actor.name - assert row["source"] =~ "by #{group_with_few_preloads.created_by_identity.actor.name}" + assert around_now?(row["created"]) end) |> with_table_row("name", group_with_lots_of_preloads.name, fn row -> [peeked_names, tail] = String.split(row["actors"], " and ", trim: true) @@ -137,7 +133,7 @@ defmodule Web.Live.Groups.IndexTest do assert tail == "7 more." - assert around_now?(row["source"]) + assert around_now?(row["created"]) end) end end diff --git a/elixir/apps/web/test/web/live/relays/show_test.exs b/elixir/apps/web/test/web/live/relays/show_test.exs index 0ba05b99e..9e2d3754a 100644 --- a/elixir/apps/web/test/web/live/relays/show_test.exs +++ b/elixir/apps/web/test/web/live/relays/show_test.exs @@ -88,7 +88,7 @@ defmodule Web.Live.Relays.ShowTest do |> vertical_table_to_map() assert table["instance group name"] =~ relay.group.name - assert table["last seen"] + assert table["last connected"] assert table["remote ip"] =~ to_string(relay.last_seen_remote_ip) assert table["ipv4 set by public_ip4_addr"] =~ to_string(relay.ipv4) assert table["ipv6 set by public_ip6_addr"] =~ to_string(relay.ipv6) diff --git a/elixir/apps/web/test/web/live/resources/index_test.exs b/elixir/apps/web/test/web/live/resources/index_test.exs index 47179033d..f3c025701 100644 --- a/elixir/apps/web/test/web/live/resources/index_test.exs +++ b/elixir/apps/web/test/web/live/resources/index_test.exs @@ -96,7 +96,7 @@ defmodule Web.Live.Resources.IndexTest do assert row["name"] =~ resource.name assert row["address"] =~ resource.address assert row["sites"] =~ group.name - assert row["authorized groups"] == "None, create a Policy to grant access." + assert row["authorized groups"] == "None - Create a Policy to grant access." end) end diff --git a/elixir/apps/web/test/web/live/sites/show_test.exs b/elixir/apps/web/test/web/live/sites/show_test.exs index fdde076ee..579623793 100644 --- a/elixir/apps/web/test/web/live/sites/show_test.exs +++ b/elixir/apps/web/test/web/live/sites/show_test.exs @@ -212,7 +212,7 @@ defmodule Web.Live.Sites.ShowTest do Enum.each(resource_rows, fn row -> assert row["name"] =~ resource.name assert row["address"] =~ resource.address - assert row["authorized groups"] == "None, create a Policy to grant access." + assert row["authorized groups"] == "None - Create a Policy to grant access." end) end