require Logger
use GenServer
- alias Wampex.Router.Authentication.{Realm, Peer}
+ alias Wampex.Router.Authentication.{Peer, Realm, Repo}
+ @ecto_repos [Repo]
def start_link(uri: uri, authid: authid, password: password) do
GenServer.start_link(__MODULE__, {uri, authid, password})
end
def init({uri, authid, password}) do
+ ensure_migrations()
%Realm{} = realm = Realm.create(uri: uri)
%Peer{} = user = Peer.create(authid: authid, password: password, realm: realm)
Logger.debug("Realm: #{inspect(realm)}")
Logger.debug("Peer: #{inspect(user)}")
:ignore
end
+
+ defp ensure_migrations do
+ Logger.info("Ensuring tables have been migrated")
+
+ for repo <- @ecto_repos() do
+ {:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :up, all: true))
+ end
+ end
end
use Ecto.Repo,
otp_app: :wampex_router,
adapter: Ecto.Adapters.Postgres
+
+ alias __MODULE__
+ require Logger
+
+ def init(:runtime, config) do
+ config = update_config(config, :database, "AUTH_DATABASE_NAME", nil)
+ config = update_config(config, :hostname, "AUTH_DATABASE_HOSTAME", nil)
+ config = update_config(config, :port, "AUTH_DATABASE_PORT", &String.to_integer/1)
+ config = update_config(config, :username, "AUTH_DATABASE_USERNAME", nil)
+ {:ok, config}
+ end
+
+ def init(:supervisor, config) do
+ ensure_db_created(config)
+ {:ok, config}
+ end
+
+ def ensure_db_created(config) do
+ Logger.info("Ensuring DB exists")
+ r = Repo.__adapter__().storage_up(config)
+ Logger.info("DB Creation: #{inspect(r)}")
+ end
+
+ def update_config(config, key, env, format) do
+ case System.get_env(env) do
+ nil ->
+ config
+
+ val ->
+ Keyword.put(config, key, do_format(val, format))
+ end
+ end
+
+ def do_format(val, nil), do: val
+ def do_format(val, fmt), do: fmt.(val)
end