lib/sentry/rails/log_subscribers/parameter_filter.rb
# frozen_string_literal: true module Sentry module Rails module LogSubscribers # Shared utility module for filtering sensitive parameters in log subscribers. # # This module provides consistent parameter filtering across all Sentry Rails # log subscribers, leveraging Rails' built-in parameter filtering when available. # It automatically detects the correct Rails parameter filtering API based on # the Rails version and includes the appropriate implementation module. # # @example Usage in a log subscriber # class MySubscriber < Sentry::Rails::LogSubscriber # include Sentry::Rails::LogSubscribers::ParameterFilter # # def my_event(event) # if Sentry.configuration.send_default_pii && event.payload[:params] # filtered_params = filter_sensitive_params(event.payload[:params]) # attributes[:params] = filtered_params unless filtered_params.empty? # end # end # end module ParameterFilter EMPTY_HASH = {}.freeze if ::Rails.version.to_f >= 6.0 def self.backend ActiveSupport::ParameterFilter end else def self.backend ActionDispatch::Http::ParameterFilter end end # Filter sensitive parameters from a hash, respecting Rails configuration. # # @param params [Hash] The parameters to filter # @return [Hash] Filtered parameters with sensitive data removed def filter_sensitive_params(params) return EMPTY_HASH unless params.is_a?(Hash) filter_parameters = ::Rails.application.config.filter_parameters parameter_filter = ParameterFilter.backend.new(filter_parameters) parameter_filter.filter(params) end end end end end