File size: 1,973 Bytes
8da2481
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
defmodule PlausibleWeb.ControllerHelpers do
  @moduledoc false

  import Plug.Conn
  import Phoenix.Controller

  def render_error(conn, status, message) do
    conn
    |> put_root_layout(false)
    |> put_status(status)
    |> put_view(PlausibleWeb.ErrorView)
    |> render("#{status}.html", message: message, layout: error_layout())
  end

  def render_error(conn, status) do
    conn
    |> put_root_layout(false)
    |> put_status(status)
    |> put_view(PlausibleWeb.ErrorView)
    |> render("#{status}.html", layout: error_layout())
  end

  defp error_layout,
    do: Application.get_env(:plausible, PlausibleWeb.Endpoint)[:render_errors][:layout]

  @auth_layout_assigns [
    layout: {PlausibleWeb.LayoutView, :auth},
    hide_header?: true,
    hide_footer?: true,
    disable_global_notices?: true
  ]

  def render_auth_page(conn, template, extra_assigns \\ []) do
    render(conn, template, Keyword.merge(@auth_layout_assigns, extra_assigns))
  end

  def debug_metadata(conn) do
    %{
      request_method: conn.method,
      request_path: conn.request_path,
      params: conn.params,
      phoenix_controller: conn.private.phoenix_controller |> to_string(),
      phoenix_action: conn.private.phoenix_action |> to_string(),
      site_id: conn.assigns.site.id,
      site_domain: conn.assigns.site.domain,
      user_id: get_user_id(conn, conn.assigns),
      team_id: get_team_id(conn, conn.assigns)
    }
  end

  defp get_user_id(_conn, %{current_user: user}), do: user.id

  defp get_user_id(conn, _assigns) do
    case PlausibleWeb.UserAuth.get_user_session(conn) do
      {:ok, user_session} -> user_session.user_id
      _ -> nil
    end
  end

  defp get_team_id(_conn, %{current_team: %Plausible.Teams.Team{id: id}}), do: id
  defp get_team_id(_conn, %{site_team: %Plausible.Teams.Team{id: id}}), do: id
  defp get_team_id(_conn, %{api_context: :site, site: %Plausible.Site{team_id: id}}), do: id
  defp get_team_id(_conn, _assigns), do: nil
end