From 9c8858f0e9be5a7f9cb4f3c5488edd664711432b Mon Sep 17 00:00:00 2001 From: Alessandro Rodi Date: Tue, 5 Nov 2024 13:40:14 +0100 Subject: [PATCH] Support regex in filter_parameters --- CHANGELOG.md | 2 +- lib/validation_error.rb | 18 +++++++++++++----- test/test_validation_error.rb | 3 ++- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 818ab7f..99ffe91 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ ## [0.3.0] - 2024-11-05 - Fix persistance in case of rolled back transactions. -- Filter sensible information by default +- Filter `Rails.application.config.filter_parameters` by default. Does not support procs. ## [0.2.0] - 2022-12-29 diff --git a/lib/validation_error.rb b/lib/validation_error.rb index c8e9c29..c0a926c 100644 --- a/lib/validation_error.rb +++ b/lib/validation_error.rb @@ -11,16 +11,24 @@ def self.track(invalid_model, action: invalid_model.persisted? ? "update" : "cre def self.filter_sensible_information(details) filter_parameters = if defined?(Rails) && Rails.respond_to?(:application) - Rails.application.config.filter_parameters.map(&:to_sym) + Rails.application.config.filter_parameters else [] end filtered_details = details.dup filtered_details.each do |column_name, errors| - if filter_parameters.include?(column_name.to_sym) - errors.each do |error| - if error[:value].present? - error[:value] = "***" + filter_parameters.each do |filter| + must_filter = case filter + when Regexp + filter.match?(column_name) + when String, Symbol + filter.to_s == column_name.to_s + end + if must_filter + errors.each do |error| + if error[:value].present? + error[:value] = "***" + end end end end diff --git a/test/test_validation_error.rb b/test/test_validation_error.rb index 8d9daea..4695b5a 100644 --- a/test/test_validation_error.rb +++ b/test/test_validation_error.rb @@ -115,7 +115,8 @@ def test_that_models_do_not_track_on_update_if_no_errors module RailsMock def self.application - @application ||= OpenStruct.new(config: OpenStruct.new(filter_parameters: [:password, :ssn])) + filter_parameters = [:password, :ssn, /password/] + @application ||= OpenStruct.new(config: OpenStruct.new(filter_parameters: filter_parameters)) end end