mirror of
https://github.com/outbackdingo/firezone.git
synced 2026-01-27 10:18:54 +00:00
Add Relay admin feature flag (#2736)
Why: * Self-hosted Relays are not going to be apart of the beta release, so hiding the functionality in the portal will allow the user not to get confused about a feature they aren't able to use. Closes #2178
This commit is contained in:
@@ -136,6 +136,10 @@ defmodule Domain.Config do
|
||||
feature_enabled?(:traffic_filters)
|
||||
end
|
||||
|
||||
def self_hosted_relays_enabled? do
|
||||
feature_enabled?(:self_hosted_relays)
|
||||
end
|
||||
|
||||
## Test helpers
|
||||
|
||||
if Mix.env() != :test do
|
||||
|
||||
@@ -635,4 +635,9 @@ defmodule Domain.Config.Definitions do
|
||||
Boolean flag to turn Resource traffic filters on/off.
|
||||
"""
|
||||
defconfig(:feature_traffic_filters_enabled, :boolean, default: false)
|
||||
|
||||
@doc """
|
||||
Boolean flag to turn Relay Admin functionality on/off.
|
||||
"""
|
||||
defconfig(:feature_self_hosted_relays_enabled, :boolean, default: false)
|
||||
end
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
</.sidebar_item>
|
||||
|
||||
<.sidebar_item
|
||||
:if={Domain.Config.self_hosted_relays_enabled?()}
|
||||
current_path={@current_path}
|
||||
navigate={~p"/#{@account}/relay_groups"}
|
||||
icon="hero-arrows-right-left"
|
||||
|
||||
@@ -3,11 +3,12 @@ defmodule Web.RelayGroups.Edit do
|
||||
alias Domain.Relays
|
||||
|
||||
def mount(%{"id" => id}, _session, socket) do
|
||||
with {:ok, group} <- Relays.fetch_group_by_id(id, socket.assigns.subject) do
|
||||
with true <- Domain.Config.self_hosted_relays_enabled?(),
|
||||
{:ok, group} <- Relays.fetch_group_by_id(id, socket.assigns.subject) do
|
||||
changeset = Relays.change_group(group)
|
||||
{:ok, assign(socket, group: group, form: to_form(changeset))}
|
||||
else
|
||||
{:error, _reason} -> raise Web.LiveErrors.NotFoundError
|
||||
_other -> raise Web.LiveErrors.NotFoundError
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -5,12 +5,12 @@ defmodule Web.RelayGroups.Index do
|
||||
def mount(_params, _session, socket) do
|
||||
subject = socket.assigns.subject
|
||||
|
||||
with {:ok, groups} <-
|
||||
Relays.list_groups(subject, preload: [:relays]) do
|
||||
with true <- Domain.Config.self_hosted_relays_enabled?(),
|
||||
{:ok, groups} <- Relays.list_groups(subject, preload: [:relays]) do
|
||||
:ok = Relays.subscribe_for_relays_presence_in_account(socket.assigns.account)
|
||||
{:ok, assign(socket, groups: groups)}
|
||||
else
|
||||
{:error, _reason} -> raise Web.LiveErrors.NotFoundError
|
||||
_other -> raise Web.LiveErrors.NotFoundError
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -3,8 +3,12 @@ defmodule Web.RelayGroups.New do
|
||||
alias Domain.Relays
|
||||
|
||||
def mount(_params, _session, socket) do
|
||||
changeset = Relays.new_group()
|
||||
{:ok, assign(socket, form: to_form(changeset))}
|
||||
with true <- Domain.Config.self_hosted_relays_enabled?() do
|
||||
changeset = Relays.new_group()
|
||||
{:ok, assign(socket, form: to_form(changeset))}
|
||||
else
|
||||
_other -> raise Web.LiveErrors.NotFoundError
|
||||
end
|
||||
end
|
||||
|
||||
def render(assigns) do
|
||||
|
||||
@@ -3,7 +3,8 @@ defmodule Web.RelayGroups.NewToken do
|
||||
alias Domain.Relays
|
||||
|
||||
def mount(%{"id" => id}, _session, socket) do
|
||||
with {:ok, group} <- Relays.fetch_group_by_id(id, socket.assigns.subject) do
|
||||
with true <- Domain.Config.self_hosted_relays_enabled?(),
|
||||
{:ok, group} <- Relays.fetch_group_by_id(id, socket.assigns.subject) do
|
||||
{group, env} =
|
||||
if connected?(socket) do
|
||||
{:ok, group} =
|
||||
@@ -25,7 +26,7 @@ defmodule Web.RelayGroups.NewToken do
|
||||
selected_tab: "docker-instructions"
|
||||
)}
|
||||
else
|
||||
{:error, _reason} -> raise Web.LiveErrors.NotFoundError
|
||||
_other -> raise Web.LiveErrors.NotFoundError
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -3,7 +3,8 @@ defmodule Web.RelayGroups.Show do
|
||||
alias Domain.Relays
|
||||
|
||||
def mount(%{"id" => id}, _session, socket) do
|
||||
with {:ok, group} <-
|
||||
with true <- Domain.Config.self_hosted_relays_enabled?(),
|
||||
{:ok, group} <-
|
||||
Relays.fetch_group_by_id(id, socket.assigns.subject,
|
||||
preload: [
|
||||
relays: [token: [created_by_identity: [:actor]]],
|
||||
@@ -13,7 +14,7 @@ defmodule Web.RelayGroups.Show do
|
||||
:ok = Relays.subscribe_for_relays_presence_in_group(group)
|
||||
{:ok, assign(socket, group: group)}
|
||||
else
|
||||
{:error, _reason} -> raise Web.LiveErrors.NotFoundError
|
||||
_other -> raise Web.LiveErrors.NotFoundError
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -3,7 +3,8 @@ defmodule Web.Relays.Show do
|
||||
alias Domain.{Relays, Config}
|
||||
|
||||
def mount(%{"id" => id}, _session, socket) do
|
||||
with {:ok, relay} <-
|
||||
with true <- Domain.Config.self_hosted_relays_enabled?(),
|
||||
{:ok, relay} <-
|
||||
Relays.fetch_relay_by_id(id, socket.assigns.subject, preload: :group) do
|
||||
:ok = Relays.subscribe_for_relays_presence_in_group(relay.group)
|
||||
|
||||
@@ -16,7 +17,7 @@ defmodule Web.Relays.Show do
|
||||
|
||||
{:ok, assign(socket, relay: relay)}
|
||||
else
|
||||
{:error, _reason} -> raise Web.LiveErrors.NotFoundError
|
||||
_other -> raise Web.LiveErrors.NotFoundError
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -152,4 +152,19 @@ defmodule Web.Live.RelayGroups.EditTest do
|
||||
assert group = Repo.get_by(Domain.Relays.Group, id: group.id)
|
||||
assert group.name == attrs.name
|
||||
end
|
||||
|
||||
test "renders not found error when self_hosted_relays feature flag is false", %{
|
||||
account: account,
|
||||
identity: identity,
|
||||
group: group,
|
||||
conn: conn
|
||||
} do
|
||||
Domain.Config.feature_flag_override(:self_hosted_relays, false)
|
||||
|
||||
assert_raise Web.LiveErrors.NotFoundError, fn ->
|
||||
conn
|
||||
|> authorize_conn(identity)
|
||||
|> live(~p"/#{account}/relay_groups/#{group}/edit")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -99,4 +99,18 @@ defmodule Web.Live.RelayGroups.IndexTest do
|
||||
assert row["status"] =~ "Online"
|
||||
end)
|
||||
end
|
||||
|
||||
test "renders not found error when self_hosted_relays feature flag is false", %{
|
||||
account: account,
|
||||
identity: identity,
|
||||
conn: conn
|
||||
} do
|
||||
Domain.Config.feature_flag_override(:self_hosted_relays, false)
|
||||
|
||||
assert_raise Web.LiveErrors.NotFoundError, fn ->
|
||||
conn
|
||||
|> authorize_conn(identity)
|
||||
|> live(~p"/#{account}/relay_groups")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -121,4 +121,18 @@ defmodule Web.Live.RelayGroups.NewTest do
|
||||
|
||||
assert assert_redirect(lv, ~p"/#{account}/relay_groups/#{group}")
|
||||
end
|
||||
|
||||
test "renders not found error when self_hosted_relays feature flag is false", %{
|
||||
account: account,
|
||||
identity: identity,
|
||||
conn: conn
|
||||
} do
|
||||
Domain.Config.feature_flag_override(:self_hosted_relays, false)
|
||||
|
||||
assert_raise Web.LiveErrors.NotFoundError, fn ->
|
||||
conn
|
||||
|> authorize_conn(identity)
|
||||
|> live(~p"/#{account}/relay_groups/new")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -46,4 +46,19 @@ defmodule Web.Live.RelayGroups.NewTokenTest do
|
||||
assert element(lv, "#deployment-instructions")
|
||||
|> render() =~ "Connected, click to continue"
|
||||
end
|
||||
|
||||
test "renders not found error when self_hosted_relays feature flag is false", %{
|
||||
account: account,
|
||||
identity: identity,
|
||||
group: group,
|
||||
conn: conn
|
||||
} do
|
||||
Domain.Config.feature_flag_override(:self_hosted_relays, false)
|
||||
|
||||
assert_raise Web.LiveErrors.NotFoundError, fn ->
|
||||
conn
|
||||
|> authorize_conn(identity)
|
||||
|> live(~p"/#{account}/relay_groups/#{group}/new_token")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -172,4 +172,19 @@ defmodule Web.Live.RelayGroups.ShowTest do
|
||||
|
||||
assert Repo.get(Domain.Relays.Group, group.id).deleted_at
|
||||
end
|
||||
|
||||
test "renders not found error when self_hosted_relays feature flag is false", %{
|
||||
account: account,
|
||||
identity: identity,
|
||||
group: group,
|
||||
conn: conn
|
||||
} do
|
||||
Domain.Config.feature_flag_override(:self_hosted_relays, false)
|
||||
|
||||
assert_raise Web.LiveErrors.NotFoundError, fn ->
|
||||
conn
|
||||
|> authorize_conn(identity)
|
||||
|> live(~p"/#{account}/relay_groups/#{group}")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -134,4 +134,19 @@ defmodule Web.Live.Relays.ShowTest do
|
||||
|
||||
assert Repo.get(Domain.Relays.Relay, relay.id).deleted_at
|
||||
end
|
||||
|
||||
test "renders not found error when self_hosted_relays feature flag is false", %{
|
||||
account: account,
|
||||
identity: identity,
|
||||
relay: relay,
|
||||
conn: conn
|
||||
} do
|
||||
Domain.Config.feature_flag_override(:self_hosted_relays, false)
|
||||
|
||||
assert_raise Web.LiveErrors.NotFoundError, fn ->
|
||||
conn
|
||||
|> authorize_conn(identity)
|
||||
|> live(~p"/#{account}/relays/#{relay}")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -75,7 +75,8 @@ config :domain, :enabled_features,
|
||||
traffic_filters: true,
|
||||
signups: true,
|
||||
flow_activities: true,
|
||||
todos: true
|
||||
todos: true,
|
||||
self_hosted_relays: true
|
||||
|
||||
config :domain, docker_registry: "us-east1-docker.pkg.dev/firezone-staging/firezone"
|
||||
|
||||
|
||||
@@ -69,7 +69,8 @@ if config_env() == :prod do
|
||||
traffic_filters: compile_config!(:feature_traffic_filters_enabled),
|
||||
signups: compile_config!(:feature_sign_up_enabled),
|
||||
flow_activities: compile_config!(:feature_flow_activities_enabled),
|
||||
todos: compile_config!(:feature_todos_enabled)
|
||||
todos: compile_config!(:feature_todos_enabled),
|
||||
relay_admin: compile_config!(:feature_self_hosted_relays_enabled)
|
||||
|
||||
config :domain, docker_registry: compile_config!(:docker_registry)
|
||||
|
||||
|
||||
@@ -420,7 +420,25 @@ locals {
|
||||
value = jsonencode({
|
||||
api_key = var.postmark_server_api_token
|
||||
})
|
||||
},
|
||||
# Feature Flags
|
||||
{
|
||||
name = "FEATURE_FLOW_ACTIVITIES_ENABLED"
|
||||
value = true
|
||||
},
|
||||
{
|
||||
name = "FEATURE_TRAFFIC_FILTERS_ENABLED"
|
||||
value = true
|
||||
},
|
||||
{
|
||||
name = "FEATURE_TODOS_ENABLED"
|
||||
value = true
|
||||
},
|
||||
{
|
||||
name = "FEATURE_RELAY_ADMIN_ENABLED"
|
||||
value = true
|
||||
}
|
||||
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user