Setup instructions:

  1. Visit your Enable Banking developer account to get your credentials
  2. Select your country code from the dropdown below
  3. Enter your Application ID and paste your Client Certificate (including the private key)
  4. Click Save Configuration, then use "Add Connection" to link your bank

Field descriptions:

<% error_msg = local_assigns[:error_message] || @error_message %> <% if error_msg.present? %>

<%= error_msg %>

<% end %> <% enable_banking_item = Current.family.enable_banking_items.first_or_initialize(name: "Enable Banking Connection") is_new_record = enable_banking_item.new_record? # Check if there are any authenticated connections (have session_id) has_authenticated_connections = Current.family.enable_banking_items.where.not(session_id: nil).exists? %> <%= styled_form_with model: enable_banking_item, url: is_new_record ? enable_banking_items_path : enable_banking_item_path(enable_banking_item), scope: :enable_banking_item, method: is_new_record ? :post : :patch, data: { turbo: true }, class: "space-y-3" do |form| %> <% if has_authenticated_connections && !is_new_record %>

Configuration locked

Credentials cannot be changed while you have active bank connections. Remove all connections first to update credentials.

<% end %>
<%= form.select :country_code, options_for_select([ ["Austria (AT)", "AT"], ["Belgium (BE)", "BE"], ["Bulgaria (BG)", "BG"], ["Croatia (HR)", "HR"], ["Cyprus (CY)", "CY"], ["Czech Republic (CZ)", "CZ"], ["Denmark (DK)", "DK"], ["Estonia (EE)", "EE"], ["Finland (FI)", "FI"], ["France (FR)", "FR"], ["Germany (DE)", "DE"], ["Greece (GR)", "GR"], ["Hungary (HU)", "HU"], ["Iceland (IS)", "IS"], ["Ireland (IE)", "IE"], ["Italy (IT)", "IT"], ["Latvia (LV)", "LV"], ["Liechtenstein (LI)", "LI"], ["Lithuania (LT)", "LT"], ["Luxembourg (LU)", "LU"], ["Malta (MT)", "MT"], ["Netherlands (NL)", "NL"], ["Norway (NO)", "NO"], ["Poland (PL)", "PL"], ["Portugal (PT)", "PT"], ["Romania (RO)", "RO"], ["Slovakia (SK)", "SK"], ["Slovenia (SI)", "SI"], ["Spain (ES)", "ES"], ["Sweden (SE)", "SE"], ["United Kingdom (GB)", "GB"] ], enable_banking_item.country_code), { label: true, include_blank: "Select country..." }, { label: "Country", class: "form-field__input", disabled: has_authenticated_connections && !is_new_record } %> <%= form.text_field :application_id, label: "Application ID", placeholder: is_new_record ? "Enter application ID" : "Enter new ID to update", value: enable_banking_item.application_id, disabled: has_authenticated_connections && !is_new_record %>
<%= form.text_area :client_certificate, label: "Client Certificate (with Private Key)", placeholder: "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----", rows: 6, class: "form-field__input font-mono text-xs", disabled: has_authenticated_connections && !is_new_record %> <% unless has_authenticated_connections && !is_new_record %>
<%= form.submit is_new_record ? "Save Configuration" : "Update Configuration", class: "inline-flex items-center justify-center rounded-lg px-4 py-2 text-sm font-medium text-white bg-gray-900 hover:bg-gray-800 focus:outline-none focus:ring-2 focus:ring-gray-900 focus:ring-offset-2 transition-colors" %>
<% end %> <% end %> <% items = local_assigns[:enable_banking_items] || @enable_banking_items || Current.family.enable_banking_items.where.not(client_certificate: nil) %> <% if items&.any? %> <% # Find the first item with valid session to use for "Add Connection" button item_for_new_connection = items.find(&:session_valid?) # Check if any item needs initial connection (configured but no session yet) item_needing_connection = items.find { |i| !i.session_valid? && !i.session_expired? } %>
<% items.each do |item| %>
<% if item.session_valid? %>

<%= item.aspsp_name || "Connected Bank" %>

Session expires: <%= item.session_expires_at&.strftime("%b %d, %Y") || "Unknown" %>

<% elsif item.session_expired? %>

<%= item.aspsp_name || "Connection" %>

Session expired - reconnect

<% else %>

Configured

Ready to link accounts

<% end %>
<% if item.session_valid? %> <%= button_to sync_enable_banking_item_path(item), method: :post, class: "inline-flex items-center justify-center rounded-lg px-3 py-1.5 text-xs font-medium text-primary bg-container border border-primary hover:bg-gray-50 transition-colors", data: { turbo: false } do %> Sync <% end %> <% elsif item.session_expired? %> <%= button_to reauthorize_enable_banking_item_path(item), method: :post, class: "inline-flex items-center justify-center rounded-lg px-3 py-1.5 text-xs font-medium text-white bg-warning hover:opacity-90 transition-colors", data: { turbo: false } do %> Reconnect <% end %> <% else %> <%= link_to select_bank_enable_banking_item_path(item), class: "inline-flex items-center justify-center rounded-lg px-3 py-1.5 text-xs font-medium text-white bg-gray-900 hover:bg-gray-800 transition-colors", data: { turbo_frame: "modal" } do %> Connect Bank <% end %> <% end %> <%= button_to enable_banking_item_path(item), method: :delete, class: "inline-flex items-center justify-center rounded-lg px-3 py-1.5 text-xs font-medium text-destructive hover:bg-destructive/10 transition-colors", data: { turbo_confirm: "Are you sure you want to remove this connection?" } do %> Remove <% end %>
<% end %> <%# Add Connection button below the list - only show if we have a valid session to copy credentials from %> <% if item_for_new_connection %>
<%= button_to new_connection_enable_banking_item_path(item_for_new_connection), method: :post, class: "inline-flex items-center gap-2 justify-center rounded-lg px-4 py-2 text-sm font-medium text-white bg-gray-900 hover:bg-gray-800 transition-colors", data: { turbo_frame: "modal" } do %> <%= icon "plus", size: "sm" %> Add Connection <% end %>
<% end %>
<% end %>