55 lines
1.4 KiB
Elixir
55 lines
1.4 KiB
Elixir
defmodule MvWeb.Plugs.RegistrationEnabled do
|
|
@moduledoc """
|
|
When direct registration is disabled in settings:
|
|
- GET /register is redirected to /sign-in with a flash message.
|
|
Puts registration_enabled from settings into session for /sign-in and /register
|
|
so the sign-in LiveView can show or hide the register link.
|
|
"""
|
|
import Plug.Conn
|
|
import Phoenix.Controller
|
|
|
|
alias Mv.Membership
|
|
|
|
def init(opts), do: opts
|
|
|
|
def call(conn, _opts) do
|
|
conn
|
|
|> maybe_redirect_register()
|
|
|> maybe_put_registration_enabled_in_session()
|
|
end
|
|
|
|
defp maybe_redirect_register(conn) do
|
|
if conn.request_path == "/register" and conn.method == "GET" do
|
|
case Membership.get_settings() do
|
|
{:ok, %{registration_enabled: true}} ->
|
|
conn
|
|
|
|
_ ->
|
|
conn
|
|
|> put_flash(:info, get_flash_message(conn))
|
|
|> redirect(to: "/sign-in")
|
|
|> halt()
|
|
end
|
|
else
|
|
conn
|
|
end
|
|
end
|
|
|
|
defp get_flash_message(_conn) do
|
|
Gettext.dgettext(MvWeb.Gettext, "default", "Registration is disabled.")
|
|
end
|
|
|
|
defp maybe_put_registration_enabled_in_session(conn) do
|
|
if conn.request_path in ["/sign-in", "/register"] do
|
|
enabled =
|
|
case Membership.get_settings() do
|
|
{:ok, %{registration_enabled: enabled?}} -> enabled?
|
|
_ -> true
|
|
end
|
|
|
|
put_session(conn, "registration_enabled", enabled)
|
|
else
|
|
conn
|
|
end
|
|
end
|
|
end
|