analytics/lib/plausible_web/plugs/first_launch_plug.ex

39 lines
937 B
Elixir
Raw Normal View History

defmodule PlausibleWeb.FirstLaunchPlug do
@moduledoc """
Redirects first-launch users to registration page.
"""
defmodule Test do
@moduledoc """
Test helper for setup blocks allowing to skip the plug processing
"""
@spec skip(map()) :: {:ok, map()}
def skip(context) do
conn = Plug.Conn.put_private(context.conn, PlausibleWeb.FirstLaunchPlug, :skip)
{:ok, Map.put(context, :conn, conn)}
end
end
@behaviour Plug
alias Plausible.Release
@impl true
def init(opts) do
_path = Keyword.fetch!(opts, :redirect_to)
end
@impl true
def call(%Plug.Conn{private: %{__MODULE__ => :skip}} = conn, _), do: conn
def call(%Plug.Conn{request_path: path} = conn, path), do: conn
def call(conn, redirect_to) do
if Release.should_be_first_launch?() do
conn
|> Phoenix.Controller.redirect(to: redirect_to)
|> Plug.Conn.halt()
else
conn
end
end
end