<%= content_for(:canonical_url, new_user_session_url) %>
<%= render 'devise/shared/select_server' if Docuseal.multitenant? %>

<%= t('sign_in') %>

<%= form_for(resource, as: resource_name, html: { class: 'space-y-6' }, data: { turbo: params[:redir].blank? }, url: session_path(resource_name)) do |f| %> <%= render 'hidden_fields' %>
<%= f.label :email, t(:email), class: 'label' %> <%= f.email_field :email, autofocus: true, autocomplete: 'email', class: 'base-input' %>
<%= f.label :password, t(:password), class: 'label' %> <%= f.password_field :password, autocomplete: 'current-password', class: 'base-input' %>
<%= f.button button_title(title: t(:sign_in), disabled_with: t(:signing_in)), class: 'base-button' %>
<% end %> <% if devise_mapping.omniauthable? %>
<% if User.omniauth_providers.include?(:google_oauth2) && Rails.application.credentials.google_client_id.present? && Rails.application.credentials.google_client_id != 'placeholder_client_id' %> <%= form_for '', url: '/auth/google_oauth2', data: { turbo: false }, method: :post do |f| %> <%= hidden_field_tag :state, { redir: params[:redir].to_s }.compact_blank.to_query %> <%= f.button button_title(title: t('sign_in_with_google'), icon: svg_icon('brand_google', class: 'w-6 h-6')), class: 'white-button w-full mt-4' %> <% end %> <% end %> <% if User.omniauth_providers.include?(:microsoft_graph) && Rails.application.credentials.microsoft_client_id.present? && Rails.application.credentials.microsoft_client_id != 'placeholder_client_id' %> <%= form_for '', url: '/auth/microsoft_graph', data: { turbo: false }, method: :post do |f| %> <%= hidden_field_tag :state, { redir: params[:redir].to_s }.compact_blank.to_query, id: 'state_microsoft' %> <%= f.button button_title(title: t('sign_in_with_microsoft'), icon: svg_icon('brand_microsoft', class: 'w-6 h-6')), class: 'white-button w-full' %> <% end %> <% end %> <% # Check if SAML is configured (either in ENV or database) saml_configured = false begin if ENV['SAML_IDP_SSO_SERVICE_URL'].present? && ENV['SAML_IDP_CERT_FINGERPRINT'].present? saml_configured = true Rails.logger.info "SAML Login Page: Using ENV configuration" else # Try to find SAML config in any account (not just current_account) saml_config_record = EncryptedConfig.where(key: 'saml_configs').first Rails.logger.info "SAML Login Page: Config record found: #{saml_config_record.present?}" if saml_config_record&.value.present? begin config = JSON.parse(saml_config_record.value) saml_configured = config['idp_sso_service_url'].present? && config['idp_cert_fingerprint'].present? Rails.logger.info "SAML Login Page: Valid JSON: Yes, SSO URL: #{config['idp_sso_service_url'].present?}, Cert: #{config['idp_cert_fingerprint'].present?}" rescue JSON::ParserError => e Rails.logger.error "SAML Login Page: JSON parse error: #{e.message}" # Invalid JSON, treat as not configured end else Rails.logger.info "SAML Login Page: Config value is empty or nil" end end rescue => e Rails.logger.error "SAML Login Page: Error checking config: #{e.message}" end %> <% if User.omniauth_providers.include?(:saml) && saml_configured %> <%= form_for '', url: '/auth/saml', data: { turbo: false }, method: :post do |f| %> <%= hidden_field_tag :state, { redir: params[:redir].to_s }.compact_blank.to_query, id: 'state_saml' %> <%= f.button button_title(title: 'Sign in with SAML SSO', icon: svg_icon('certificate', class: 'w-6 h-6')), class: 'white-button w-full' %> <% end %> <% end %>
<% end %> <%= render 'extra_links' %> <%= render 'devise/shared/links' %>