diff --git a/app/controllers/settings/providers_controller.rb b/app/controllers/settings/providers_controller.rb
index 196acfca4..e93cb1695 100644
--- a/app/controllers/settings/providers_controller.rb
+++ b/app/controllers/settings/providers_controller.rb
@@ -10,6 +10,9 @@ class Settings::ProvidersController < ApplicationController
]
prepare_show_context
+ rescue ActiveRecord::Encryption::Errors::Configuration => e
+ Rails.logger.error("Active Record Encryption not configured: #{e.message}")
+ @encryption_error = true
end
def update
diff --git a/app/views/settings/providers/show.html.erb b/app/views/settings/providers/show.html.erb
index 1b6f433c4..4a3bd6964 100644
--- a/app/views/settings/providers/show.html.erb
+++ b/app/views/settings/providers/show.html.erb
@@ -1,62 +1,76 @@
<%= content_for :page_title, "Sync Providers" %>
-
-
- Configure credentials for third-party sync providers. Settings configured here will override environment variables.
-
-
+ <% if @encryption_error %>
+
+
+ <%= icon("triangle-alert", class: "w-5 h-5 text-destructive shrink-0 mt-0.5") %>
+
+
<%= t("settings.providers.encryption_error.title") %>
+
<%= t("settings.providers.encryption_error.message") %>
+
+
+
+ <% else %>
+
+
+ Configure credentials for third-party sync providers. Settings configured here will override environment variables.
+
+
+ <% end %>
- <% @provider_configurations.each do |config| %>
- <%= settings_section title: config.provider_key.titleize, collapsible: true, open: false do %>
- <%= render "settings/providers/provider_form", configuration: config %>
+ <% unless @encryption_error %>
+ <% @provider_configurations.each do |config| %>
+ <%= settings_section title: config.provider_key.titleize, collapsible: true, open: false do %>
+ <%= render "settings/providers/provider_form", configuration: config %>
+ <% end %>
+ <% end %>
+
+ <%# Providers below are hardcoded because they manage Family-scoped connections %>
+ <%# (via their own models like SimplefinItem, LunchflowItem, etc.) rather than global settings. %>
+ <%# They require custom UI for connection management, status display, and sync actions. %>
+ <%# The controller excludes them from @provider_configurations (see prepare_show_context). %>
+
+ <%= settings_section title: "Lunch Flow", collapsible: true, open: false do %>
+
+ <%= render "settings/providers/lunchflow_panel" %>
+
+ <% end %>
+
+ <%= settings_section title: "SimpleFIN", collapsible: true, open: false do %>
+
+ <%= render "settings/providers/simplefin_panel" %>
+
+ <% end %>
+
+ <%= settings_section title: "Enable Banking (beta)", collapsible: true, open: false do %>
+
+ <%= render "settings/providers/enable_banking_panel" %>
+
+ <% end %>
+
+ <%= settings_section title: "CoinStats (beta)", collapsible: true, open: false do %>
+
+ <%= render "settings/providers/coinstats_panel" %>
+
+ <% end %>
+
+ <%= settings_section title: "Mercury (beta)", collapsible: true, open: false do %>
+
+ <%= render "settings/providers/mercury_panel" %>
+
+ <% end %>
+
+ <%= settings_section title: "Coinbase (beta)", collapsible: true, open: false do %>
+
+ <%= render "settings/providers/coinbase_panel" %>
+
+ <% end %>
+
+ <%= settings_section title: "SnapTrade (beta)", collapsible: true, open: false do %>
+
+ <%= render "settings/providers/snaptrade_panel" %>
+
<% end %>
<% end %>
-
- <%# Providers below are hardcoded because they manage Family-scoped connections %>
- <%# (via their own models like SimplefinItem, LunchflowItem, etc.) rather than global settings. %>
- <%# They require custom UI for connection management, status display, and sync actions. %>
- <%# The controller excludes them from @provider_configurations (see prepare_show_context). %>
-
- <%= settings_section title: "Lunch Flow", collapsible: true, open: false do %>
-
- <%= render "settings/providers/lunchflow_panel" %>
-
- <% end %>
-
- <%= settings_section title: "SimpleFIN", collapsible: true, open: false do %>
-
- <%= render "settings/providers/simplefin_panel" %>
-
- <% end %>
-
- <%= settings_section title: "Enable Banking (beta)", collapsible: true, open: false do %>
-
- <%= render "settings/providers/enable_banking_panel" %>
-
- <% end %>
-
- <%= settings_section title: "CoinStats (beta)", collapsible: true, open: false do %>
-
- <%= render "settings/providers/coinstats_panel" %>
-
- <% end %>
-
- <%= settings_section title: "Mercury (beta)", collapsible: true, open: false do %>
-
- <%= render "settings/providers/mercury_panel" %>
-
- <% end %>
-
- <%= settings_section title: "Coinbase (beta)", collapsible: true, open: false do %>
-
- <%= render "settings/providers/coinbase_panel" %>
-
- <% end %>
-
- <%= settings_section title: "SnapTrade (beta)", collapsible: true, open: false do %>
-
- <%= render "settings/providers/snaptrade_panel" %>
-
- <% end %>
diff --git a/config/locales/views/settings/en.yml b/config/locales/views/settings/en.yml
index 88990073f..da9c6ae6c 100644
--- a/config/locales/views/settings/en.yml
+++ b/config/locales/views/settings/en.yml
@@ -148,6 +148,9 @@ en:
providers:
show:
coinbase_title: Coinbase
+ encryption_error:
+ title: Encryption Configuration Required
+ message: Active Record encryption keys are not configured. Please ensure the encryption credentials (active_record_encryption.primary_key, active_record_encryption.deterministic_key, and active_record_encryption.key_derivation_salt) are properly set up in your Rails credentials or environment variables before using sync providers.
coinbase_panel:
setup_instructions: "To connect Coinbase:"
step1_html: Go to