defmodule MvWeb.SignInLive do @moduledoc """ Custom sign-in page with language selector and conditional Single Sign-On button. - Renders a language selector (same pattern as LinkOidcAccountLive). - Wraps the default AshAuthentication SignIn component in a container with `data-oidc-configured` so that CSS can hide the SSO button when OIDC is not configured. """ use Phoenix.LiveView use Gettext, backend: MvWeb.Gettext alias AshAuthentication.Phoenix.Components alias Mv.Config @impl true def mount(_params, session, socket) do overrides = session |> Map.get("overrides", [AshAuthentication.Phoenix.Overrides.Default]) # Locale from session (set by set_locale plug / LiveUserAuth); default "de" locale = session["locale"] || "de" Gettext.put_locale(MvWeb.Gettext, locale) socket = socket |> assign(overrides: overrides) |> assign_new(:otp_app, fn -> nil end) |> assign(:path, session["path"] || "/") |> assign(:reset_path, session["reset_path"]) |> assign(:register_path, session["register_path"]) |> assign(:current_tenant, session["tenant"]) |> assign(:resources, session["resources"]) |> assign(:context, session["context"] || %{}) |> assign(:auth_routes_prefix, session["auth_routes_prefix"]) |> assign(:gettext_fn, session["gettext_fn"]) |> assign(:live_action, :sign_in) |> assign(:oidc_configured, Config.oidc_configured?()) |> assign(:oidc_only, Config.oidc_only?()) |> assign(:root_class, "grid h-screen place-items-center bg-base-100") |> assign(:sign_in_id, "sign-in") |> assign(:locale, locale) {:ok, socket} end @impl true def handle_params(_, _uri, socket) do {:noreply, socket} end @impl true def render(assigns) do ~H"""