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 Coinbase API Settings