From 95d3f765f40bd15a790ea9aec91b5c758e59e4e7 Mon Sep 17 00:00:00 2001
From: Jamil
Fixes #8479
---
.../apps/web/lib/web/live/resources/index.ex | 28 ++++++-----
.../apps/web/lib/web/live/resources/show.ex | 35 ++++++++++----
.../test/web/live/resources/index_test.exs | 47 +++++++++++++++++++
.../web/test/web/live/resources/show_test.exs | 21 +++++++++
.../web/test/web/live/sites/index_test.exs | 4 +-
5 files changed, 110 insertions(+), 25 deletions(-)
diff --git a/elixir/apps/web/lib/web/live/resources/index.ex b/elixir/apps/web/lib/web/live/resources/index.ex
index 9bbfcc106..01c966a87 100644
--- a/elixir/apps/web/lib/web/live/resources/index.ex
+++ b/elixir/apps/web/lib/web/live/resources/index.ex
@@ -7,17 +7,10 @@ defmodule Web.Resources.Index do
:ok = Resources.subscribe_to_events_for_account(socket.assigns.account)
end
- internet_site =
- case Domain.Gateways.fetch_internet_group(socket.assigns.account) do
- {:ok, internet_site} -> internet_site
- _ -> nil
- end
-
socket =
socket
|> assign(stale: false)
|> assign(page_title: "Resources")
- |> assign(internet_site: internet_site)
|> assign_live_table("resources",
query_module: Resources.Resource.Query,
sortable_fields: [
@@ -70,12 +63,6 @@ defmodule Web.Resources.Index do
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.
- The Internet Resource can now be managed in the - <.link navigate={~p"/#{@account}/sites/#{@internet_site}"} class={link_style()}> - Internet Site. - -
<:action> <.docs_action path="/deploy/resources" /> @@ -160,6 +147,21 @@ defmodule Web.Resources.Index do + + <.section :if={Domain.Accounts.internet_resource_enabled?(@account)}> + <:title> + Internet + + <:help> + The Internet Resource is a special resource that matches all traffic not matched by any other resource. + + <:action> + <.button id="view-internet-resource" navigate={~p"/#{@account}/resources/internet"}> + View Internet Resource + + + <:content> + """ end diff --git a/elixir/apps/web/lib/web/live/resources/show.ex b/elixir/apps/web/lib/web/live/resources/show.ex index 264e6ba6f..3361f8e01 100644 --- a/elixir/apps/web/lib/web/live/resources/show.ex +++ b/elixir/apps/web/lib/web/live/resources/show.ex @@ -5,16 +5,7 @@ defmodule Web.Resources.Show do alias Domain.{Accounts, Resources, Policies, Flows} def mount(%{"id" => id} = params, _session, socket) do - with {:ok, resource} <- - Resources.fetch_resource_by_id_or_persistent_id(id, socket.assigns.subject, - preload: [ - :gateway_groups, - :created_by_actor, - created_by_identity: [:actor], - replaced_by_resource: [], - replaces_resource: [] - ] - ), + with {:ok, resource} <- fetch_resource(id, socket.assigns.subject), {:ok, actor_groups_peek} <- Resources.peek_resource_actor_groups([resource], 3, socket.assigns.subject) do if connected?(socket) do @@ -443,4 +434,28 @@ defmodule Web.Resources.Show do false end end + + defp fetch_resource("internet", subject) do + Resources.fetch_internet_resource(subject, + preload: [ + :gateway_groups, + :created_by_actor, + created_by_identity: [:actor], + replaced_by_resource: [], + replaces_resource: [] + ] + ) + end + + defp fetch_resource(id, subject) do + Resources.fetch_resource_by_id_or_persistent_id(id, subject, + preload: [ + :gateway_groups, + :created_by_actor, + created_by_identity: [:actor], + replaced_by_resource: [], + replaces_resource: [] + ] + ) + end end 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 a057918fb..fd0647065 100644 --- a/elixir/apps/web/test/web/live/resources/index_test.exs +++ b/elixir/apps/web/test/web/live/resources/index_test.exs @@ -206,6 +206,53 @@ defmodule Web.Live.Resources.IndexTest do end) end + test "renders Internet Resource section if enabled", %{ + account: account, + identity: identity, + conn: conn + } do + account = Fixtures.Accounts.update_account(account, features: %{internet_resource: true}) + group = Fixtures.Gateways.create_internet_group(account: account) + + Fixtures.Resources.create_internet_resource( + account: account, + connections: [%{gateway_group_id: group.id}] + ) + + {:ok, lv, _html} = + conn + |> authorize_conn(identity) + |> live(~p"/#{account}/resources") + + path = ~p"/#{account}/resources/internet" + + assert {_, {:live_redirect, %{to: ^path}}} = + lv + |> element("#view-internet-resource") + |> render_click() + end + + test "does not render Internet Resource section if disabled", %{ + account: account, + identity: identity, + conn: conn + } do + group = Fixtures.Gateways.create_internet_group(account: account) + + Fixtures.Resources.create_internet_resource( + account: account, + connections: [%{gateway_group_id: group.id}] + ) + + {:ok, _lv, html} = + conn + |> authorize_conn(identity) + |> live(~p"/#{account}/resources") + + refute html =~ "view-internet-resource" + refute html =~ "View Internet Resource" + end + describe "handle_info/2" do test "Shows reload button when resource is created", %{ account: account, diff --git a/elixir/apps/web/test/web/live/resources/show_test.exs b/elixir/apps/web/test/web/live/resources/show_test.exs index 269a72405..e37979466 100644 --- a/elixir/apps/web/test/web/live/resources/show_test.exs +++ b/elixir/apps/web/test/web/live/resources/show_test.exs @@ -45,6 +45,27 @@ defmodule Web.Live.Resources.ShowTest do }}} end + test "renders internet resource without action buttons", %{ + account: account, + identity: identity, + conn: conn + } do + group = Fixtures.Gateways.create_internet_group(account: account) + + resource = + Fixtures.Resources.create_internet_resource( + account: account, + connections: [%{gateway_group_id: group.id}] + ) + + {:ok, _lv, html} = + conn + |> authorize_conn(identity) + |> live(~p"/#{account}/resources/#{resource}") + + assert active_buttons(html) == [] + end + test "renders deleted resource without action buttons", %{ account: account, resource: resource, diff --git a/elixir/apps/web/test/web/live/sites/index_test.exs b/elixir/apps/web/test/web/live/sites/index_test.exs index 973a61d93..6970f155c 100644 --- a/elixir/apps/web/test/web/live/sites/index_test.exs +++ b/elixir/apps/web/test/web/live/sites/index_test.exs @@ -118,7 +118,7 @@ defmodule Web.Live.Sites.IndexTest do identity: identity, conn: conn } do - {:ok, group} = Domain.Gateways.create_internet_group(account) + group = Fixtures.Gateways.create_internet_group(account: account) {:ok, lv, _html} = conn @@ -139,7 +139,7 @@ defmodule Web.Live.Sites.IndexTest do } do account = Fixtures.Accounts.update_account(account, features: %{internet_resource: true}) - {:ok, group} = Domain.Gateways.create_internet_group(account) + group = Fixtures.Gateways.create_internet_group(account: account) gateway = Fixtures.Gateways.create_gateway(account: account, group: group) Domain.Config.put_env_override(:test_pid, self()) :ok = Domain.Gateways.subscribe_to_gateways_presence_in_account(account)