mitgliederverwaltung/lib/mv/secrets.ex
Moritz 8edbbac95f
feat: OIDC configuration in global Settings (ENV or DB)
- Add oidc_* attributes to Setting, migration and Config helpers
- Secrets and OidcRoleSyncConfig read from Config (ENV overrides DB)
- GlobalSettingsLive: OIDC section with disabled fields when ENV set
- OIDC role sync tests use DataCase for DB access
2026-02-24 13:58:24 +01:00

58 lines
1.5 KiB
Elixir

defmodule Mv.Secrets do
@moduledoc """
Secret provider for AshAuthentication.
## Purpose
Provides runtime configuration secrets for Ash Authentication strategies,
particularly for OIDC (Rauthy) authentication.
## Configuration Source
Secrets are read via `Mv.Config` which prefers environment variables and
falls back to Settings from the database:
- OIDC_CLIENT_ID / settings.oidc_client_id
- OIDC_CLIENT_SECRET / settings.oidc_client_secret
- OIDC_BASE_URL / settings.oidc_base_url
- OIDC_REDIRECT_URI / settings.oidc_redirect_uri
## Usage
This module is automatically called by AshAuthentication when resolving
secrets for the User resource's OIDC strategy.
"""
use AshAuthentication.Secret
def secret_for(
[:authentication, :strategies, :oidc, :client_id],
Mv.Accounts.User,
_opts,
_meth
) do
{:ok, Mv.Config.oidc_client_id()}
end
def secret_for(
[:authentication, :strategies, :oidc, :redirect_uri],
Mv.Accounts.User,
_opts,
_meth
) do
{:ok, Mv.Config.oidc_redirect_uri()}
end
def secret_for(
[:authentication, :strategies, :oidc, :client_secret],
Mv.Accounts.User,
_opts,
_meth
) do
{:ok, Mv.Config.oidc_client_secret()}
end
def secret_for(
[:authentication, :strategies, :oidc, :base_url],
Mv.Accounts.User,
_opts,
_meth
) do
{:ok, Mv.Config.oidc_base_url()}
end
end