OIDC-only sign-in, Vereinfacht connection test, locale defaults, and settings/docs cleanup #445
1 changed files with 98 additions and 3 deletions
|
|
@ -58,6 +58,8 @@ defmodule MvWeb.GlobalSettingsLive do
|
||||||
|> assign(:oidc_client_secret_env_set, Mv.Config.oidc_client_secret_env_set?())
|
|> assign(:oidc_client_secret_env_set, Mv.Config.oidc_client_secret_env_set?())
|
||||||
|> assign(:oidc_admin_group_name_env_set, Mv.Config.oidc_admin_group_name_env_set?())
|
|> assign(:oidc_admin_group_name_env_set, Mv.Config.oidc_admin_group_name_env_set?())
|
||||||
|> assign(:oidc_groups_claim_env_set, Mv.Config.oidc_groups_claim_env_set?())
|
|> assign(:oidc_groups_claim_env_set, Mv.Config.oidc_groups_claim_env_set?())
|
||||||
|
|> assign(:oidc_only_env_set, Mv.Config.oidc_only_env_set?())
|
||||||
|
|> assign(:oidc_configured, Mv.Config.oidc_configured?())
|
||||||
|> assign(:oidc_client_secret_set, present?(settings.oidc_client_secret))
|
|> assign(:oidc_client_secret_set, present?(settings.oidc_client_secret))
|
||||||
|> assign_form()
|
|> assign_form()
|
||||||
|
|
||||||
|
|
@ -293,12 +295,36 @@ defmodule MvWeb.GlobalSettingsLive do
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
<div class="form-control">
|
||||||
|
<label class="label cursor-pointer justify-start gap-2">
|
||||||
|
<.input
|
||||||
|
field={@form[:oidc_only]}
|
||||||
|
type="checkbox"
|
||||||
|
class="checkbox checkbox-sm"
|
||||||
|
disabled={@oidc_only_env_set or not @oidc_configured}
|
||||||
|
/>
|
||||||
|
<span class="label-text">
|
||||||
|
{gettext("Only OIDC sign-in (hide password login)")}
|
||||||
|
<%= if @oidc_only_env_set do %>
|
||||||
|
<span class="label-text-alt text-base-content/70 ml-1">
|
||||||
|
({gettext("From OIDC_ONLY")})
|
||||||
|
</span>
|
||||||
|
<% end %>
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
|
<p class="label-text-alt text-base-content/70 mt-1">
|
||||||
|
{gettext(
|
||||||
|
"When enabled and OIDC is configured, the sign-in page shows only the Single Sign-On button."
|
||||||
|
)}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<.button
|
<.button
|
||||||
:if={
|
:if={
|
||||||
not (@oidc_client_id_env_set and @oidc_base_url_env_set and
|
not (@oidc_client_id_env_set and @oidc_base_url_env_set and
|
||||||
@oidc_redirect_uri_env_set and @oidc_client_secret_env_set and
|
@oidc_redirect_uri_env_set and @oidc_client_secret_env_set and
|
||||||
@oidc_admin_group_name_env_set and @oidc_groups_claim_env_set)
|
@oidc_admin_group_name_env_set and @oidc_groups_claim_env_set and
|
||||||
|
@oidc_only_env_set)
|
||||||
}
|
}
|
||||||
phx-disable-with={gettext("Saving...")}
|
phx-disable-with={gettext("Saving...")}
|
||||||
variant="primary"
|
variant="primary"
|
||||||
|
|
@ -419,8 +445,17 @@ defmodule MvWeb.GlobalSettingsLive do
|
||||||
end
|
end
|
||||||
|
|
||||||
defp assign_form(%{assigns: %{settings: settings}} = socket) do
|
defp assign_form(%{assigns: %{settings: settings}} = socket) do
|
||||||
# Never put API key / client secret into form/DOM to avoid secret leak
|
# Show ENV values in disabled fields (Vereinfacht and OIDC); never expose API key / client secret
|
||||||
settings_for_form = %{settings | vereinfacht_api_key: nil, oidc_client_secret: nil}
|
settings_display =
|
||||||
|
settings
|
||||||
|
|> merge_vereinfacht_env_values()
|
||||||
|
|> merge_oidc_env_values()
|
||||||
|
|
||||||
|
settings_for_form = %{
|
||||||
|
settings_display
|
||||||
|
| vereinfacht_api_key: nil,
|
||||||
|
oidc_client_secret: nil
|
||||||
|
}
|
||||||
|
|
||||||
form =
|
form =
|
||||||
AshPhoenix.Form.for_update(
|
AshPhoenix.Form.for_update(
|
||||||
|
|
@ -434,6 +469,66 @@ defmodule MvWeb.GlobalSettingsLive do
|
||||||
assign(socket, form: to_form(form))
|
assign(socket, form: to_form(form))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp put_if_env_set(map, _key, false, _value), do: map
|
||||||
|
defp put_if_env_set(map, key, true, value), do: Map.put(map, key, value)
|
||||||
|
|
||||||
|
defp merge_vereinfacht_env_values(s) do
|
||||||
|
s
|
||||||
|
|> put_if_env_set(
|
||||||
|
:vereinfacht_api_url,
|
||||||
|
Mv.Config.vereinfacht_api_url_env_set?(),
|
||||||
|
Mv.Config.vereinfacht_api_url()
|
||||||
|
)
|
||||||
|
|> put_if_env_set(
|
||||||
|
:vereinfacht_club_id,
|
||||||
|
Mv.Config.vereinfacht_club_id_env_set?(),
|
||||||
|
Mv.Config.vereinfacht_club_id()
|
||||||
|
)
|
||||||
|
|> put_if_env_set(
|
||||||
|
:vereinfacht_app_url,
|
||||||
|
Mv.Config.vereinfacht_app_url_env_set?(),
|
||||||
|
Mv.Config.vereinfacht_app_url()
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
defp merge_oidc_env_values(s) do
|
||||||
|
s
|
||||||
|
|> put_if_env_set(
|
||||||
|
:oidc_client_id,
|
||||||
|
Mv.Config.oidc_client_id_env_set?(),
|
||||||
|
Mv.Config.oidc_client_id()
|
||||||
|
)
|
||||||
|
|> put_if_env_set(
|
||||||
|
:oidc_base_url,
|
||||||
|
Mv.Config.oidc_base_url_env_set?(),
|
||||||
|
Mv.Config.oidc_base_url()
|
||||||
|
)
|
||||||
|
|> put_if_env_set(
|
||||||
|
:oidc_redirect_uri,
|
||||||
|
Mv.Config.oidc_redirect_uri_env_set?(),
|
||||||
|
Mv.Config.oidc_redirect_uri()
|
||||||
|
)
|
||||||
|
|> put_if_env_set(
|
||||||
|
:oidc_admin_group_name,
|
||||||
|
Mv.Config.oidc_admin_group_name_env_set?(),
|
||||||
|
Mv.Config.oidc_admin_group_name()
|
||||||
|
)
|
||||||
|
|> put_if_env_set(
|
||||||
|
:oidc_groups_claim,
|
||||||
|
Mv.Config.oidc_groups_claim_env_set?(),
|
||||||
|
Mv.Config.oidc_groups_claim()
|
||||||
|
)
|
||||||
|
|> put_if_oidc_only_env_set()
|
||||||
|
end
|
||||||
|
|
||||||
|
defp put_if_oidc_only_env_set(s) do
|
||||||
|
if Mv.Config.oidc_only_env_set?() do
|
||||||
|
Map.put(s, :oidc_only, Mv.Config.oidc_only?())
|
||||||
|
else
|
||||||
|
s
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
defp enrich_sync_errors([]), do: []
|
defp enrich_sync_errors([]), do: []
|
||||||
|
|
||||||
defp enrich_sync_errors(errors) when is_list(errors) do
|
defp enrich_sync_errors(errors) when is_list(errors) do
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue