From 2e55d37b382efd5e30997b16f28b212a22cedbec Mon Sep 17 00:00:00 2001 From: bmanifold Date: Mon, 30 Oct 2023 22:04:32 -0400 Subject: [PATCH] Add Sign up ENV flag (#2526) Why: * During the beta launch, sign-ups will need to be disabled to make sure no unexpected accounts are created. --- elixir/apps/domain/lib/domain/config.ex | 4 ++ .../domain/lib/domain/config/definitions.ex | 9 ++++ elixir/apps/web/lib/web/live/sign_up.ex | 41 +++++++++++++++++-- .../test/web/live/sign_up/sign_up_test.exs | 9 ++++ 4 files changed, 59 insertions(+), 4 deletions(-) diff --git a/elixir/apps/domain/lib/domain/config.ex b/elixir/apps/domain/lib/domain/config.ex index f774495e2..d7cac36df 100644 --- a/elixir/apps/domain/lib/domain/config.ex +++ b/elixir/apps/domain/lib/domain/config.ex @@ -113,6 +113,10 @@ defmodule Domain.Config do end end + def sign_up_enabled? do + compile_config!(Definitions, :feature_sign_up_enabled) + end + ## Test helpers if Mix.env() != :test do diff --git a/elixir/apps/domain/lib/domain/config/definitions.ex b/elixir/apps/domain/lib/domain/config/definitions.ex index 0e0a2f1c9..e69042d6d 100644 --- a/elixir/apps/domain/lib/domain/config/definitions.ex +++ b/elixir/apps/domain/lib/domain/config/definitions.ex @@ -604,4 +604,13 @@ defmodule Domain.Config.Definitions do default: nil, changeset: {Logo, :changeset, []} ) + + ############################################## + ## Feature Flags + ############################################## + + @doc """ + Boolean flag to turn Sign-ups on/off. + """ + defconfig(:feature_sign_up_enabled, :boolean, default: true) end diff --git a/elixir/apps/web/lib/web/live/sign_up.ex b/elixir/apps/web/lib/web/live/sign_up.ex index 2fa88056d..5390ebae4 100644 --- a/elixir/apps/web/lib/web/live/sign_up.ex +++ b/elixir/apps/web/lib/web/live/sign_up.ex @@ -1,6 +1,6 @@ defmodule Web.SignUp do use Web, {:live_view, layout: {Web.Layouts, :public}} - alias Domain.{Auth, Accounts, Actors} + alias Domain.{Auth, Accounts, Actors, Config} alias Web.Registration defmodule Registration do @@ -37,6 +37,15 @@ defmodule Web.SignUp do actor: %{type: :account_admin_user} }) + socket = + assign(socket, + form: to_form(changeset), + account: nil, + sign_up_enabled?: Config.sign_up_enabled?() + ) + + {:ok, socket} + {:ok, assign(socket, form: to_form(changeset), account: nil)} end @@ -61,8 +70,9 @@ defmodule Web.SignUp do <:item> - <.sign_up_form :if={@account == nil} flash={@flash} form={@form} /> - <.welcome :if={@account} account={@account} /> + <.sign_up_form :if={@account == nil && @sign_up_enabled?} flash={@flash} form={@form} /> + <.welcome :if={@account && @sign_up_enabled?} account={@account} /> + <.sign_up_disabled :if={!@sign_up_enabled?} /> @@ -187,6 +197,29 @@ defmodule Web.SignUp do """ end + def sign_up_disabled(assigns) do + ~H""" +
+
+ Sign-ups are currently disabled. +
+
+ Please contact + + sales@firezone.dev + + for more information. +
+

+ By signing up you agree to our <.link + href="https://www.firezone.dev/terms" + class="text-blue-600 dark:text-blue-500 hover:underline" + >Terms of Use. +

+
+ """ + end + def handle_event("validate", %{"registration" => attrs}, socket) do changeset = %Registration{} @@ -206,7 +239,7 @@ defmodule Web.SignUp do |> Registration.changeset(attrs) |> Map.put(:action, :insert) - if changeset.valid? do + if changeset.valid? && socket.assigns.sign_up_enabled? do registration = Ecto.Changeset.apply_changes(changeset) multi = diff --git a/elixir/apps/web/test/web/live/sign_up/sign_up_test.exs b/elixir/apps/web/test/web/live/sign_up/sign_up_test.exs index 8628d372c..7f7d5ee89 100644 --- a/elixir/apps/web/test/web/live/sign_up/sign_up_test.exs +++ b/elixir/apps/web/test/web/live/sign_up/sign_up_test.exs @@ -78,4 +78,13 @@ defmodule Web.Live.SignUpTest do "registration[email]" => ["has invalid format"] } end + + test "renders signup disabled message", %{conn: conn} do + Domain.Config.put_system_env_override(:feature_sign_up_enabled, false) + + {:ok, _lv, html} = live(conn, ~p"/sign_up") + + assert html =~ "Sign-ups are currently disabled" + assert html =~ "sales@firezone.dev" + end end