defmodule AuthN.SessionStorage.AssignsMap do
@moduledoc ~S"""
Module for storing sessions into `conn.private`. Used for testing.
"""
@behaviour AuthN.SessionStorage
@type conn :: %Plug.Conn{}
@spec get_user_token(conn) :: {term | nil, conn}
def get_user_token(conn) do
user_token =
case conn.private do
%{auth_user_token: user_token} -> user_token
_ -> nil
end
{user_token, conn}
end
@spec put_user_token(conn, term) :: conn
def put_user_token(conn, user_token), do: Plug.Conn.put_private(conn, :auth_user_token, user_token)
@spec delete_user_token(conn, function) :: conn
def delete_user_token(conn, _), do: %{conn | private: Map.delete(conn.private, :auth_user_token)}
end