45 lines
1.3 KiB
Elixir
45 lines
1.3 KiB
Elixir
|
|
defmodule SimpleshopTheme.Secrets do
|
||
|
|
@moduledoc """
|
||
|
|
Loads encrypted secrets from the database into Application env at runtime.
|
||
|
|
|
||
|
|
Secrets are stored encrypted in the settings table via `Settings.put_secret/2`
|
||
|
|
and loaded into the appropriate Application config on startup. This keeps all
|
||
|
|
credentials in the portable SQLite database, encrypted via the Vault module.
|
||
|
|
|
||
|
|
The only external dependency is `SECRET_KEY_BASE` (used to derive encryption keys).
|
||
|
|
"""
|
||
|
|
|
||
|
|
alias SimpleshopTheme.Settings
|
||
|
|
|
||
|
|
require Logger
|
||
|
|
|
||
|
|
@doc """
|
||
|
|
Loads all secrets from the database into Application env.
|
||
|
|
|
||
|
|
Called at startup from the supervision tree, after the Repo is ready.
|
||
|
|
"""
|
||
|
|
def load_all do
|
||
|
|
load_stripe_config()
|
||
|
|
end
|
||
|
|
|
||
|
|
@doc """
|
||
|
|
Loads Stripe credentials from encrypted settings into Application env.
|
||
|
|
"""
|
||
|
|
def load_stripe_config do
|
||
|
|
api_key = Settings.get_secret("stripe_api_key")
|
||
|
|
signing_secret = Settings.get_secret("stripe_signing_secret")
|
||
|
|
|
||
|
|
if api_key do
|
||
|
|
Application.put_env(:stripity_stripe, :api_key, api_key)
|
||
|
|
Logger.debug("Stripe API key loaded from database")
|
||
|
|
end
|
||
|
|
|
||
|
|
if signing_secret do
|
||
|
|
Application.put_env(:stripity_stripe, :signing_secret, signing_secret)
|
||
|
|
Logger.debug("Stripe webhook secret loaded from database")
|
||
|
|
end
|
||
|
|
|
||
|
|
:ok
|
||
|
|
end
|
||
|
|
end
|