Class: Brakeman::IgnoreConfig

Inherits:
Object
  • Object
show all
Defined in:
lib/brakeman/report/ignore/config.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(file, new_warnings) ⇒ IgnoreConfig

Returns a new instance of IgnoreConfig.


9
10
11
12
13
14
15
16
# File 'lib/brakeman/report/ignore/config.rb', line 9

def initialize file, new_warnings
  @file = file
  @new_warnings = new_warnings
  @already_ignored = []
  @ignored_fingerprints = Set.new
  @notes = {}
  @shown_warnings = @ignored_warnings = nil
end

Instance Attribute Details

#fileObject

Returns the value of attribute file


7
8
9
# File 'lib/brakeman/report/ignore/config.rb', line 7

def file
  @file
end

#ignored_warningsObject (readonly)

Returns the value of attribute ignored_warnings


6
7
8
# File 'lib/brakeman/report/ignore/config.rb', line 6

def ignored_warnings
  @ignored_warnings
end

#shown_warningsObject (readonly)

Returns the value of attribute shown_warnings


6
7
8
# File 'lib/brakeman/report/ignore/config.rb', line 6

def shown_warnings
  @shown_warnings
end

Instance Method Details

#add_note(warning, note) ⇒ Object

Add note for warning


53
54
55
# File 'lib/brakeman/report/ignore/config.rb', line 53

def add_note warning, note
  @notes[warning.fingerprint] = note
end

#filter_ignoredObject

Populate ignored_warnings and shown_warnings based on ignore configuration


20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/brakeman/report/ignore/config.rb', line 20

def filter_ignored
  @shown_warnings = []
  @ignored_warnings = []

  @new_warnings.each do |w|
    if ignored? w
      @ignored_warnings << w
    else
      @shown_warnings << w
    end
  end

  @shown_warnings
end

#ignore(warning) ⇒ Object


48
49
50
# File 'lib/brakeman/report/ignore/config.rb', line 48

def ignore warning
  @ignored_fingerprints << warning.fingerprint
end

#ignored?(warning) ⇒ Boolean

Determine if warning should be ignored

Returns:

  • (Boolean)

44
45
46
# File 'lib/brakeman/report/ignore/config.rb', line 44

def ignored? warning
  @ignored_fingerprints.include? warning.fingerprint
end

#note_for(warning) ⇒ Object

Retrieve note for warning if it exists. Returns nil if no note is found


59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/brakeman/report/ignore/config.rb', line 59

def note_for warning
  if warning.is_a? Warning
    fingerprint = warning.fingerprint
  else
    fingerprint = warning[:fingerprint]
  end

  @already_ignored.each do |w|
    if fingerprint == w[:fingerprint]
      return w[:note]
    end
  end

  nil
end

#read_from_file(file = @file) ⇒ Object

Read configuration to file


76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/brakeman/report/ignore/config.rb', line 76

def read_from_file file = @file
  if File.exist? file
    @already_ignored = MultiJson.load(File.read(file), :symbolize_keys => true)[:ignored_warnings]
  else
    Brakeman.notify "[Notice] Could not find ignore configuration in #{file}"
    @already_ignored = []
  end

  @already_ignored.each do |w|
    @ignored_fingerprints << w[:fingerprint]
    @notes[w[:fingerprint]] = w[:note]
  end
end

#save_to_file(warnings, file = @file) ⇒ Object

Save configuration to file


91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/brakeman/report/ignore/config.rb', line 91

def save_to_file warnings, file = @file
  warnings = warnings.map do |w|
    if w.is_a? Warning
      w_hash = w.to_hash
      w_hash[:file] = w.relative_path
      w = w_hash
    end

    w[:note] = @notes[w[:fingerprint]] || ""
    w
  end

  output = {
    :ignored_warnings => warnings,
    :updated => Time.now.to_s,
    :brakeman_version => Brakeman::Version
  }

  File.open file, "w" do |f|
    f.puts MultiJson.dump(output, :pretty => true)
  end
end

#save_with_oldObject

Save old ignored warnings and newly ignored ones


115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/brakeman/report/ignore/config.rb', line 115

def save_with_old
  warnings = @ignored_warnings.dup

  # Only add ignored warnings not already ignored
  @already_ignored.each do |w|
    fingerprint = w[:fingerprint]

    unless @ignored_warnings.find { |w| w.fingerprint == fingerprint }
      warnings << w
    end
  end

  save_to_file warnings
end

#unignore(warning) ⇒ Object

Remove warning from ignored list


36
37
38
39
40
41
# File 'lib/brakeman/report/ignore/config.rb', line 36

def unignore warning
  @ignored_fingerprints.delete warning.fingerprint
  @already_ignored.reject! do |w|
    w[:fingerprint] == warning.fingerprint
  end
end