lib/oidcc/plug/cache.ex

defmodule Oidcc.Plug.Cache do
  @moduledoc """
  Behaviour to cache introspection / userinfo requests

  ## Usage

  * Userinfo: See `t:Oidcc.Plug.LoadUserinfo.opts/0` / `cache`
  * Introspection: See `t:Oidcc.Plug.IntrospectToken.opts/0` / `cache`
  """
  @moduledoc since: "0.1.0"

  @type t() :: module()

  @doc """
  Check cache if userinfo / introspection is stored for `token`.
  """
  @doc since: "0.1.0"
  @callback get(type :: :userinfo, token :: String.t(), conn :: Plug.Conn.t()) ::
              {:ok, :oidcc_jwt_util.claims()} | :miss
  @callback get(type :: :introspection, token :: String.t(), conn :: Plug.Conn.t()) ::
              {:ok, Oidcc.TokenIntrospection.t()} | :miss

  @doc """
  Store userinfo / introspection for `token`.
  """
  @doc since: "0.1.0"
  @callback put(
              type :: :userinfo,
              token :: String.t(),
              data :: :oidcc_jwt_util.claims(),
              conn :: Plug.Conn.t()
            ) :: :ok
  @callback put(
              type :: :introspection,
              token :: String.t(),
              data :: Oidcc.TokenIntrospection.t(),
              conn :: Plug.Conn.t()
            ) :: :ok
end