File size: 937 Bytes
88211d3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | 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
|