defmodule AwsRdsCAStore do @moduledoc """ Functionality to retrieve the AWS RDS CA certificate store and use it in the DB connection configuration. """ @doc """ Returns the path to the AWS RDS CA certificate store PEM file. ## Examples AwsRdsCAStore.file_path() #=> /Users/me/aws_rds_castore/_build/dev/lib/aws_rds_castore/priv/global-bundle.pem" """ @spec file_path() :: Path.t() def file_path() do :aws_rds_castore.file_path() end @doc """ Returns a set of `:ssl` transport options for certificate verification. Accepts an Ecto database URI or a hostname. ## Examples # In runtime.exs: config :my_app, MyApp.Repo, url: database_url, ssl: AwsRdsCAStore.ssl_opts(database_url), ### With older Postgrex versions: # ssl: true, # ssl_opts: AwsRdsCAStore.ssl_opts(database_url), pool_size: String.to_integer(System.get_env("POOL_SIZE") || "10"), socket_options: maybe_ipv6 """ def ssl_opts(url_or_hostname) when is_list(url_or_hostname) do ssl_opts(List.to_string(url_or_hostname)) end def ssl_opts(url_or_hostname) do hostname = case URI.parse(url_or_hostname) do %URI{scheme: nil} -> url_or_hostname %URI{host: host} -> host end :aws_rds_castore.ssl_opts(hostname) end end