<%# locals: (sso_provider:) %> <% if sso_provider.errors.any? %>
<%= icon "alert-circle", class: "w-5 h-5 text-destructive mr-2 shrink-0" %>

<%= t("admin.sso_providers.form.errors_title", count: sso_provider.errors.count) %>

    <% sso_provider.errors.full_messages.each do |message| %>
  • <%= message %>
  • <% end %>
<% end %> <%= styled_form_with model: [:admin, sso_provider], class: "space-y-6", data: { controller: "admin-sso-form" } do |form| %>

<%= t("admin.sso_providers.form.basic_information") %>

<%= form.select :strategy, options_for_select([ [t("admin.sso_providers.form.strategy_openid_connect"), "openid_connect"], [t("admin.sso_providers.form.strategy_saml"), "saml"], [t("admin.sso_providers.form.strategy_google_oauth2"), "google_oauth2"], [t("admin.sso_providers.form.strategy_github"), "github"] ], sso_provider.strategy), { label: t("admin.sso_providers.form.strategy_label") }, { data: { action: "change->admin-sso-form#toggleFields" } } %> <%= form.text_field :name, label: t("admin.sso_providers.form.name_label"), placeholder: t("admin.sso_providers.form.name_placeholder"), required: true, data: { action: "input->admin-sso-form#updateCallbackUrl" } %>

<%= t("admin.sso_providers.form.name_help") %>

<%= form.text_field :label, label: t("admin.sso_providers.form.label_label"), placeholder: t("admin.sso_providers.form.label_placeholder"), required: true %>
<%= form.text_field :icon, label: t("admin.sso_providers.form.icon_label"), placeholder: t("admin.sso_providers.form.icon_placeholder") %>

<%= t("admin.sso_providers.form.icon_help") %>

<%= t("admin.sso_providers.form.enabled_label") %>

<%= t("admin.sso_providers.form.enabled_help") %>

<%= form.toggle :enabled %>

<%= t("admin.sso_providers.form.oauth_configuration") %>

"> <%= form.text_field :issuer, label: t("admin.sso_providers.form.issuer_label"), placeholder: t("admin.sso_providers.form.issuer_placeholder"), data: { action: "blur->admin-sso-form#validateIssuer" } %>

<%= t("admin.sso_providers.form.issuer_help") %>

<%= form.text_field :client_id, label: t("admin.sso_providers.form.client_id_label"), placeholder: t("admin.sso_providers.form.client_id_placeholder"), required: true %> <%= form.password_field :client_secret, label: t("admin.sso_providers.form.client_secret_label"), placeholder: sso_provider.persisted? ? t("admin.sso_providers.form.client_secret_placeholder_existing") : t("admin.sso_providers.form.client_secret_placeholder_new"), required: !sso_provider.persisted? %> <% if sso_provider.persisted? %>

<%= t("admin.sso_providers.form.client_secret_help_existing") %>

<% end %>
">
<%= "#{request.base_url}/auth/#{sso_provider.name.presence || 'PROVIDER_NAME'}/callback" %>

<%= t("admin.sso_providers.form.redirect_uri_help") %>

">

<%= t("admin.sso_providers.form.saml_configuration") %>

" class="w-full px-3 py-2 border border-primary rounded-lg text-sm" placeholder="https://idp.example.com/metadata" autocomplete="off">

<%= t("admin.sso_providers.form.idp_metadata_url_help") %>

<%= t("admin.sso_providers.form.manual_saml_config") %>

<%= t("admin.sso_providers.form.manual_saml_help") %>

" class="w-full px-3 py-2 border border-primary rounded-lg text-sm" placeholder="https://idp.example.com/sso" autocomplete="off">
" class="w-full px-3 py-2 border border-primary rounded-lg text-sm" placeholder="https://idp.example.com/slo (optional)" autocomplete="off">

<%= t("admin.sso_providers.form.idp_certificate_help") %>

" class="w-full px-3 py-2 border border-primary rounded-lg text-sm font-mono" placeholder="AB:CD:EF:..." autocomplete="off">
<%= "#{request.base_url}/auth/#{sso_provider.name.presence || 'PROVIDER_NAME'}/callback" %>

<%= t("admin.sso_providers.form.saml_sp_callback_url_help") %>

<%= t("admin.sso_providers.form.provisioning_title") %>

<%= form.select "settings[default_role]", options_for_select([ [t("admin.sso_providers.form.role_guest", default: "Guest"), "guest"], [t("admin.sso_providers.form.role_member"), "member"], [t("admin.sso_providers.form.role_admin"), "admin"], [t("admin.sso_providers.form.role_super_admin"), "super_admin"] ], sso_provider.settings&.dig("default_role").to_s.presence || "member"), { label: t("admin.sso_providers.form.default_role_label"), include_blank: false } %>

<%= t("admin.sso_providers.form.default_role_help") %>

<%= t("admin.sso_providers.form.role_mapping_title") %>

<%= t("admin.sso_providers.form.role_mapping_help") %>

" class="w-full px-3 py-2 border border-primary rounded-lg text-sm" placeholder="Platform-Admins, IdP-Superusers" autocomplete="off">

<%= t("admin.sso_providers.form.groups_help") %>

" class="w-full px-3 py-2 border border-primary rounded-lg text-sm" placeholder="Team-Leads, Managers" autocomplete="off">
" class="w-full px-3 py-2 border border-primary rounded-lg text-sm" placeholder="* (all groups)" autocomplete="off">
" class="w-full px-3 py-2 border border-primary rounded-lg text-sm" placeholder="Early-Access-Guests" autocomplete="off">
">

<%= t("admin.sso_providers.form.advanced_title") %>

<%= form.text_field "settings[scopes]", label: t("admin.sso_providers.form.scopes_label"), value: sso_provider.settings&.dig("scopes"), placeholder: "openid email profile groups" %>

<%= t("admin.sso_providers.form.scopes_help") %>

<%= form.select "settings[prompt]", options_for_select([ [t("admin.sso_providers.form.prompt_default"), ""], [t("admin.sso_providers.form.prompt_login"), "login"], [t("admin.sso_providers.form.prompt_consent"), "consent"], [t("admin.sso_providers.form.prompt_select_account"), "select_account"], [t("admin.sso_providers.form.prompt_none"), "none"] ], sso_provider.settings&.dig("prompt")), { label: t("admin.sso_providers.form.prompt_label"), include_blank: false } %>

<%= t("admin.sso_providers.form.prompt_help") %>

<% if sso_provider.persisted? %> <% end %>
<%= link_to t("admin.sso_providers.form.cancel"), admin_sso_providers_path, class: "px-4 py-2 text-sm font-medium text-secondary hover:text-primary" %> <%= form.submit sso_provider.persisted? ? t("admin.sso_providers.form.update_provider") : t("admin.sso_providers.form.create_provider"), class: "px-4 py-2 button-bg-primary text-inverse rounded-lg text-sm font-medium hover:button-bg-primary-hover" %>
<% end %>