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
|