lib/statestores/config.ex

defmodule Statestores.Config do
  require Logger
  alias Vapor.Provider.{Env, Dotenv}

  def load() do
    providers = [
      %Dotenv{},
      %Env{
        bindings: [
          {:proxy_db_type, "PROXY_DATABASE_TYPE",
           default: Statestores.Util.get_default_database_type(), required: false},
          {:proxy_db_name, "PROXY_DATABASE_NAME", default: "eigr-functions-db", required: false},
          {:proxy_db_username, "PROXY_DATABASE_USERNAME", default: "admin", required: false},
          {:proxy_db_secret, "PROXY_DATABASE_SECRET", default: "admin", required: false},
          {:proxy_db_host, "PROXY_DATABASE_HOST", default: "localhost", required: false},
          {:proxy_db_port, "PROXY_DATABASE_PORT",
           default: Statestores.Util.get_default_database_port(),
           map: &String.to_integer/1,
           required: false}
        ]
      }
    ]

    config = Vapor.load!(providers)

    Logger.info("[Statestores.Config] Loading configs")

    Enum.each(config, fn {key, value} ->
      value_str = if String.contains?(Atom.to_string(key), "secret"), do: "****", else: value
      Logger.info("[Statestores.Config] Loading config: [#{key}]:[#{value_str}]")
      Application.put_env(:spawn, key, value, persistent: true)
    end)

    config
  end
end