lib/auth0/management/connections.ex

defmodule Auth0.Management.Connections do
  alias Auth0.Config
  alias Auth0.Management.Connections.List
  alias Auth0.Management.Connections.Create
  alias Auth0.Management.Connections.Get
  alias Auth0.Management.Connections.Delete
  alias Auth0.Management.Connections.Patch
  alias Auth0.Management.Connections.ScimConfiguration
  alias Auth0.Management.Connections.Status
  alias Auth0.Management.Connections.Users

  @type id :: String.t()
  @type token_id :: String.t()
  @type config :: Config.t()
  @type error :: {:error, integer, term} | {:error, term}

  @doc """
  Retrieves detailed list of all connections that match the specified strategy. If no strategy is provided, all connections within your tenant are retrieved. This action can accept a list of fields to include or exclude from the resulting list of connections.

  ## see
  https://auth0.com/docs/api/management/v2/connections/get-connections

  """
  @spec list(map(), config) ::
          {:ok, list(map()) | map()} | error
  def list(%{} = params, %Config{} = config) do
    List.execute(params, config)
  end

  @doc """
  Creates a new connection according to the JSON object received in body.

  ## see
  https://auth0.com/docs/api/management/v2/connections/post-connections

  """
  @spec create(map(), config) ::
          {:ok, map()} | error
  def create(%{} = params, %Config{} = config) do
    Create.execute(params, config)
  end

  @doc """
  Retrieve details for a specified connection along with options that can be used for identity provider configuration.

  ## see
  https://auth0.com/docs/api/management/v2/connections/get-connections-by-id

  """
  @spec get(id, map(), config) ::
          {:ok, map()} | error
  def get(id, %{} = params, %Config{} = config) do
    Get.execute(id, params, config)
  end

  @doc """
  Removes a specific connection from your tenant. This action cannot be undone. Once removed, users can no longer use this connection to authenticate.

  ## see
  https://auth0.com/docs/api/management/v2/connections/delete-connections-by-id

  """
  @spec delete(id, config) :: {:ok, String.t()} | error
  def delete(id, %Config{} = config) do
    Delete.execute(id, config)
  end

  @doc """
  Update details for a specific connection, including option properties for identity provider configuration.

  ## see
  https://auth0.com/docs/api/management/v2/connections/patch-connections-by-id

  """
  @spec update(id, map(), config) ::
          {:ok, map()} | error
  def update(id, %{} = params, %Config{} = config) do
    Patch.execute(id, params, config)
  end

  @doc """
  Retrieves a scim configuration by its connectionId.

  ## see
  https://auth0.com/docs/api/management/v2/connections/get-scim-configuration

  """
  @spec get_scim_configuration(id, config) :: {:ok, map()} | error
  def get_scim_configuration(id, %Config{} = config) do
    ScimConfiguration.Get.execute(id, config)
  end

  @doc """
  Deletes a scim configuration by its connectionId.

  ## see
  https://auth0.com/docs/api/management/v2/connections/delete-scim-configuration

  """
  @spec delete_scim_configuration(id, config) :: {:ok, String.t()} | error
  def delete_scim_configuration(id, %Config{} = config) do
    ScimConfiguration.Delete.execute(id, config)
  end

  @doc """
  Update a scim configuration by its connectionId.

  ## see
  https://auth0.com/docs/api/management/v2/connections/patch-scim-configuration

  """
  @spec update_scim_configuration(id, map(), config) :: {:ok, map()} | error
  def update_scim_configuration(id, %{} = params, %Config{} = config) do
    ScimConfiguration.Patch.execute(id, params, config)
  end

  @doc """
  Create a scim configuration for a connection.

  ## see
  https://auth0.com/docs/api/management/v2/connections/post-scim-configuration

  """
  @spec create_scim_configuration(id, map(), config) :: {:ok, map()} | error
  def create_scim_configuration(id, %{} = params, %Config{} = config) do
    ScimConfiguration.Create.execute(id, params, config)
  end

  @doc """
  Retrieves a scim configuration's default mapping by its connectionId.

  ## see
  https://auth0.com/docs/api/management/v2/connections/get-default-mapping

  """
  @spec get_scim_configuration_default_mapping(id, config) :: {:ok, map()} | error
  def get_scim_configuration_default_mapping(id, %Config{} = config) do
    ScimConfiguration.DefaultMapping.Get.execute(id, config)
  end

  @doc """
  Retrieves all scim tokens by its connection id.

  ## see
  https://auth0.com/docs/api/management/v2/connections/get-scim-tokens

  """
  @spec get_scim_configuration_tokens(id, config) :: {:ok, list(map())} | error
  def get_scim_configuration_tokens(id, %Config{} = config) do
    ScimConfiguration.Tokens.Get.execute(id, config)
  end

  @doc """
  Create a scim token for a scim client.

  ## see
  https://auth0.com/docs/api/management/v2/connections/post-scim-token

  """
  @spec create_scim_configuration_tokens(id, map(), config) :: {:ok, map()} | error
  def create_scim_configuration_tokens(id, %{} = params, %Config{} = config) do
    ScimConfiguration.Tokens.Create.execute(id, params, config)
  end

  @doc """
  Deletes a scim token by its connection id and tokenId.

  ## see
  https://auth0.com/docs/api/management/v2/connections/delete-tokens-by-token-id

  """
  @spec delete_scim_configuration_tokens(id, token_id, config) :: {:ok, String.t()} | error
  def delete_scim_configuration_tokens(id, token_id, %Config{} = config) do
    ScimConfiguration.Tokens.Delete.execute(id, token_id, config)
  end

  @doc """
  Retrieves the status of an ad/ldap connection referenced by its ID. 200 OK http status code response is returned when the connection is online, otherwise a 404 status code is returned along with an error message

  ## see
  https://auth0.com/docs/api/management/v2/connections/get-status

  """
  @spec get_status(id, config) :: {:ok, boolean} | error
  def get_status(id, %Config{} = config) do
    Status.Check.execute(id, config)
  end

  @doc """
  Deletes a specified connection user by its email (you cannot delete all users from specific connection). Currently, only Database Connections are supported.

  ## see
  https://auth0.com/docs/api/management/v2/connections/delete-users-by-email

  """
  @spec delete_users(id, map(), config) ::
          {:ok, String.t()} | error
  def delete_users(id, %{} = params, %Config{} = config) do
    Users.Delete.execute(id, params, config)
  end
end