lib/lti_1p3/nonces.ex

defmodule Lti_1p3.Nonces do
  import Lti_1p3.Config

  alias Lti_1p3.Nonce

  require Logger

  @doc """
  Gets a single nonce.
  Returns nil if the Nonce does not exist.
  ## Examples
      iex> get_nonce(123)
      %Nonce{}
      iex> get_nonce(456)
      nil
  """
  def get_nonce(id), do: provider!().get_nonce(id)

  @doc """
  Creates a nonce. Returns a error if the nonce already exists
  ## Examples
      iex> create_nonce("value", "domain")
      {:ok, %Nonce{}}
      iex> create_nonce("value", "domain")
      {:error, %Lti_1p3.DataProviderError{}}
  """
  def create_nonce(value, domain \\ nil), do: provider!().create_nonce(%Nonce{value: value, domain: domain})

  @doc """
  Removes all nonces older than the configured @max_nonce_ttl_sec value
  """
  def cleanup_nonce_store() do
    Logger.info("Cleaning up expired LTI 1.3 nonces...")

    nonce_ttl_sec = Lti_1p3.Config.get(:nonce_ttl_sec)
    provider!().delete_expired_nonces(nonce_ttl_sec)

    Logger.info("Nonce cleanup complete.")
  end

end