Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Ticket #8432: exception_notification_with_param_logging.2.diff

File exception_notification_with_param_logging.2.diff, 5.0 kB (added by toolmantim, 2 years ago)
  • test/test_helper.rb

    old new  
     1require 'test/unit' 
     2require 'rubygems' 
     3require 'active_support' 
     4 
     5$:.unshift File.join(File.dirname(__FILE__), '../lib') 
     6 
     7RAILS_ROOT = '.' unless defined?(RAILS_ROOT) 
  • test/exception_notifier_helper_test.rb

    old new  
     1require 'test_helper' 
     2require 'exception_notifier_helper' 
     3 
     4class ExceptionNotifierHelperTest < Test::Unit::TestCase 
     5 
     6  class ExceptionNotifierHelperIncludeTarget 
     7    include ExceptionNotifierHelper 
     8  end 
     9 
     10  def setup 
     11    @helper = ExceptionNotifierHelperIncludeTarget.new 
     12  end 
     13 
     14  # No controller 
     15   
     16  def test_should_not_exclude_raw_post_parameters_if_no_controller 
     17    assert !@helper.exclude_raw_post_parameters? 
     18  end 
     19   
     20  # Controller, no filtering 
     21   
     22  class ControllerWithoutFilterParameters; end 
     23 
     24  def test_should_not_filter_env_values_for_raw_post_data_keys_if_controller_can_not_filter_parameters 
     25    stub_controller(ControllerWithoutFilterParameters.new) 
     26    assert @helper.filter_sensitive_post_data_from_env("RAW_POST_DATA", "secret").include?("secret") 
     27  end 
     28  def test_should_not_exclude_raw_post_parameters_if_controller_can_not_filter_parameters 
     29    stub_controller(ControllerWithoutFilterParameters.new) 
     30    assert !@helper.exclude_raw_post_parameters?     
     31  end 
     32  def test_should_return_params_if_controller_can_not_filter_parameters 
     33    stub_controller(ControllerWithoutFilterParameters.new) 
     34    assert_equal :params, @helper.filter_sensitive_post_data_parameters(:params) 
     35  end 
     36 
     37  # Controller with filtering 
     38 
     39  class ControllerWithFilterParameters 
     40    def filter_parameters(params); :filtered end 
     41  end 
     42 
     43  def test_should_filter_env_values_for_raw_post_data_keys_if_controller_can_filter_parameters 
     44    stub_controller(ControllerWithFilterParameters.new) 
     45    assert !@helper.filter_sensitive_post_data_from_env("RAW_POST_DATA", "secret").include?("secret") 
     46    assert @helper.filter_sensitive_post_data_from_env("SOME_OTHER_KEY", "secret").include?("secret") 
     47  end 
     48  def test_should_exclude_raw_post_parameters_if_controller_can_filter_parameters 
     49    stub_controller(ControllerWithFilterParameters.new) 
     50    assert @helper.exclude_raw_post_parameters? 
     51  end 
     52  def test_should_delegate_param_filtering_to_controller_if_controller_can_filter_parameters 
     53    stub_controller(ControllerWithFilterParameters.new) 
     54    assert_equal :filtered, @helper.filter_sensitive_post_data_parameters(:params) 
     55  end 
     56   
     57  private 
     58    def stub_controller(controller) 
     59      @helper.instance_variable_set(:@controller, controller) 
     60    end 
     61end 
  • lib/exception_notifier_helper.rb

    old new  
    2323module ExceptionNotifierHelper 
    2424  VIEW_PATH = "views/exception_notifier" 
    2525  APP_PATH = "#{RAILS_ROOT}/app/#{VIEW_PATH}" 
     26  PARAM_FILTER_REPLACEMENT = "[FILTERED]" 
    2627 
    2728  def render_section(section) 
    2829    RAILS_DEFAULT_LOGGER.info("rendering section #{section.inspect}") 
     
    6061  def object_to_yaml(object) 
    6162    object.to_yaml.sub(/^---\s*/m, "") 
    6263  end 
     64 
     65  def exclude_raw_post_parameters? 
     66    @controller && @controller.respond_to?(:filter_parameters) 
     67  end 
     68   
     69  def filter_sensitive_post_data_parameters(parameters) 
     70    exclude_raw_post_parameters? ? @controller.filter_parameters(parameters) : parameters 
     71  end 
     72   
     73  def filter_sensitive_post_data_from_env(env_key, env_value) 
     74    return env_value unless exclude_raw_post_parameters? 
     75    (env_key =~ /RAW_POST_DATA/i) ? PARAM_FILTER_REPLACEMENT : env_value 
     76  end 
    6377end 
  • views/exception_notifier/_environment.rhtml

    old new  
    11<% max = @request.env.keys.max { |a,b| a.length <=> b.length } -%> 
    22<% @request.env.keys.sort.each do |key| -%> 
    3 * <%= "%*-s: %s" % [max.length, key, @request.env[key].to_s.strip] %> 
     3* <%= "%*-s: %s" % [max.length, key, filter_sensitive_post_data_from_env(key, @request.env[key].to_s.strip)] %> 
    44<% end -%> 
    55 
    66* Process: <%= $$ %> 
  • views/exception_notifier/_request.rhtml

    old new  
    11* URL: <%= @request.protocol %><%= @host %><%= @request.request_uri %> 
    2 * Parameters: <%= @request.parameters.inspect %> 
     2* Parameters: <%= filter_sensitive_post_data_parameters(@request.parameters).inspect %> 
    33* Rails root: <%= @rails_root %>