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