lib/auth_plug_helpers.ex

defmodule AuthPlug.Helpers do
  @doc """
  `get_baseurl_from_conn/1` derives the base URL from the conn struct
  e.g: http://localhost:4000 or https://app.dwyl.com
  """

  require Logger

  @spec get_baseurl_from_conn(Map) :: String.t()
  def get_baseurl_from_conn(%{host: h, port: p}) when h == "localhost" do
    "http://#{h}:#{p}"
  end

  def get_baseurl_from_conn(%{host: h}) do
    "https://#{h}"
  end

  @doc """
  `strip_struct_metadata/1` removes the Ecto Struct metadata from a struct.
  This is essential before attempting to create a JWT as `Jason.encode/2`
  chokes on any invalid data. See: github.com/dwyl/auth_plug/issues/16
  """
  def strip_struct_metadata(struct) do
    struct
    |> Map.delete(:__meta__)
    |> Map.delete(:__struct__)
    # association
    |> Map.delete(:statuses)
    # association
    |> Map.delete(:login_logs)
    # binary
    |> Map.delete(:email_hash)
  end

  @doc """
  `check_environment_vars/0` displays a friendly error message
  if the AUTH_API_KEY environment variable is not defined.
  """
  def check_environment_vars do
    key = AuthPlug.Token.api_key()
    # ignoring this because :api_key is hard-coded in config/test.exs
    # coveralls-ignore-start
    if is_nil(key) do
      Logger.error("No AUTH_API_KEY set, find out how at: https://git.io/JJ6sS")
    end

    # coveralls-ignore-stop
    key
  end
end