diff --git a/lib/ex_secrets.ex b/lib/ex_secrets.ex index 1815944..e61230b 100644 --- a/lib/ex_secrets.ex +++ b/lib/ex_secrets.ex @@ -127,11 +127,24 @@ defmodule ExSecrets do Supported for providers: - :system_env + - :dot_env - :azure_key_vault - :azure_managed_identity - :google_secret_manager Calling this function requires the provider to be configured with credentials that allow create secrets like Secret Admionistrator in Azure Key Vault. + + ## Examples + + iex> File.touch(".env.dev") + :ok + iex> Application.put_env(:ex_secrets, :providers, %{dot_env: %{path: ".env.dev"}}) + :ok + iex> ExSecrets.set("TEST", "test", provider: :dot_env) + :ok + iex> Application.delete_env(:ex_secrets, :providers) + :ok + iex> File.rm(".env.dev") """ @spec set(String.t(), String.t(), Keyword.t()) :: :ok | :error diff --git a/lib/providers/dot_env.ex b/lib/providers/dot_env.ex index dcddcd6..102da46 100644 --- a/lib/providers/dot_env.ex +++ b/lib/providers/dot_env.ex @@ -16,8 +16,17 @@ defmodule ExSecrets.Providers.DotEnv do end end - def set(_name, _value) do - {:error, "Not implemented"} + def set(name, value) do + path = Config.provider_config_value(:dot_env, :path) + + with existing when is_nil(existing) <- get(name), + true <- is_binary(path), + :ok <- File.write(path, "#{name}=#{value}\n", [:append]) do + Cache.save(name, value) + :ok + else + _ -> {:error, "Failed to write to #{path}"} + end end def init(_) do diff --git a/lib/providers/system_env.ex b/lib/providers/system_env.ex index 7c6c1db..f0edd99 100644 --- a/lib/providers/system_env.ex +++ b/lib/providers/system_env.ex @@ -18,7 +18,6 @@ defmodule ExSecrets.Providers.SystemEnv do def set(name, value) do System.put_env(name, value) - {:ok, value} end def process_name() do diff --git a/mix.exs b/mix.exs index 573e260..a49a31c 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule ExSecrets.MixProject do def project do [ app: :ex_secrets, - version: "0.3.0", + version: "0.3.1", elixir: "~> 1.13", build_embedded: Mix.env() == :prod, start_permanent: Mix.env() == :prod,