File size: 948 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
defmodule Plausible.Plugins.API.Capabilities do
  @moduledoc """
  Context module for querying API capabilities
  """
  require Plausible.Billing.Feature
  alias Plausible.Billing.Feature

  @spec get(Plug.Conn.t()) :: {:ok, map()}
  def get(conn) do
    conn = PlausibleWeb.Plugs.AuthorizePluginsAPI.call(conn, send_error?: false)

    site = conn.assigns[:authorized_site]

    features =
      if site do
        site = Plausible.Repo.preload(site, :team)
        allowed_features = Plausible.Teams.Billing.allowed_features_for(site.team)

        Feature.list()
        |> Enum.map(fn mod ->
          feature = mod |> Module.split() |> List.last()
          {feature, mod in allowed_features}
        end)
      else
        Enum.map(Feature.list_short_names(), &{&1, false})
      end

    {:ok,
     %{
       authorized: not is_nil(site),
       data_domain: site && site.domain,
       features: Enum.into(features, %{})
     }}
  end
end