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

Ticket #8432: exception_notification_with_param_logging.diff

File exception_notification_with_param_logging.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    attr_writer :exclude_raw_post_parameters 
     8    include ExceptionNotifierHelper 
     9  end 
     10 
     11  def setup 
     12    @helper = ExceptionNotifierHelperIncludeTarget.new 
     13  end 
     14 
     15  # No controller 
     16   
     17  def test_should_not_exclude_raw_post_parameters_if_no_controller 
     18    assert !@helper.exclude_raw_post_parameters? 
     19  end 
     20   
     21  # Controller, no filtering 
     22   
     23  class ControllerWithoutFilterParameters; end 
     24 
     25  def test_should_not_filter_env_values_for_raw_post_data_keys_if_controller_can_not_filter_parameters 
     26    stub_controller(ControllerWithoutFilterParameters.new) 
     27    assert @helper.filter_sensitive_post_data_from_env("RAW_POST_DATA", "secret").include?("secret") 
     28  end 
     29  def test_should_not_exclude_raw_post_parameters_if_controller_can_not_filter_parameters 
     30    stub_controller(ControllerWithoutFilterParameters.new) 
     31    assert !@helper.exclude_raw_post_parameters?     
     32  end 
     33  def test_should_return_params_if_controller_can_not_filter_parameters 
     34    stub_controller(ControllerWithoutFilterParameters.new) 
     35    assert_equal :params, @helper.filter_sensitive_post_data_parameters(:params) 
     36  end 
     37 
     38  # Controller with filtering 
     39 
     40  class ControllerWithFilterParameters 
     41    def filter_parameters(params); :filtered end 
     42  end 
     43 
     44  def test_should_filter_env_values_for_raw_post_data_keys_if_controller_can_filter_parameters 
     45    stub_controller(ControllerWithFilterParameters.new) 
     46    assert !@helper.filter_sensitive_post_data_from_env("RAW_POST_DATA", "secret").include?("secret") 
     47    assert @helper.filter_sensitive_post_data_from_env("SOME_OTHER_KEY", "secret").include?("secret") 
     48  end 
     49  def test_should_exclude_raw_post_parameters_if_controller_can_filter_parameters 
     50    stub_controller(ControllerWithFilterParameters.new) 
     51    assert @helper.exclude_raw_post_parameters? 
     52  end 
     53  def test_should_delegate_param_filtering_to_controller_if_controller_can_filter_parameters 
     54    stub_controller(ControllerWithFilterParameters.new) 
     55    assert_equal :filtered, @helper.filter_sensitive_post_data_parameters(:params) 
     56  end 
     57   
     58  private 
     59    def stub_controller(controller) 
     60      @helper.instance_variable_set(:@controller, controller) 
     61    end 
     62end 
  • 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 %>