Class: Hedra::Baseline
- Inherits:
-
Object
- Object
- Hedra::Baseline
- Defined in:
- lib/hedra/baseline.rb
Overview
Manage security baselines for comparison
Constant Summary collapse
- BASELINE_DIR =
File.join(Config::CONFIG_DIR, 'baselines')
Instance Method Summary collapse
- #compare(baseline_name, current_results) ⇒ Object
- #delete(name) ⇒ Object
-
#initialize ⇒ Baseline
constructor
A new instance of Baseline.
- #list ⇒ Object
- #load(name) ⇒ Object
- #save(name, results) ⇒ Object
Constructor Details
#initialize ⇒ Baseline
Returns a new instance of Baseline.
11 12 13 |
# File 'lib/hedra/baseline.rb', line 11 def initialize FileUtils.mkdir_p(BASELINE_DIR) end |
Instance Method Details
#compare(baseline_name, current_results) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/hedra/baseline.rb', line 52 def compare(baseline_name, current_results) baseline = load(baseline_name) baseline_results = baseline[:results] comparisons = [] current_results.each do |current| baseline_result = baseline_results.find { |b| b[:url] == current[:url] } next unless baseline_result comparison = { url: current[:url], baseline_score: baseline_result[:score], current_score: current[:score], score_change: current[:score] - baseline_result[:score], new_findings: current[:findings] - baseline_result[:findings], resolved_findings: baseline_result[:findings] - current[:findings] } comparisons << comparison end comparisons end |
#delete(name) ⇒ Object
45 46 47 48 49 50 |
# File 'lib/hedra/baseline.rb', line 45 def delete(name) baseline_file = File.join(BASELINE_DIR, "#{sanitize_name(name)}.json") raise Error, "Baseline not found: #{name}" unless File.exist?(baseline_file) File.delete(baseline_file) end |
#list ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/hedra/baseline.rb', line 32 def list Dir.glob(File.join(BASELINE_DIR, '*.json')).map do |file| data = JSON.parse(File.read(file), symbolize_names: true) { name: data[:name], created_at: data[:created_at], url_count: data[:results].length } end rescue StandardError [] end |
#load(name) ⇒ Object
25 26 27 28 29 30 |
# File 'lib/hedra/baseline.rb', line 25 def load(name) baseline_file = File.join(BASELINE_DIR, "#{sanitize_name(name)}.json") raise Error, "Baseline not found: #{name}" unless File.exist?(baseline_file) JSON.parse(File.read(baseline_file), symbolize_names: true) end |
#save(name, results) ⇒ Object
15 16 17 18 19 20 21 22 23 |
# File 'lib/hedra/baseline.rb', line 15 def save(name, results) baseline_file = File.join(BASELINE_DIR, "#{sanitize_name(name)}.json") data = { name: name, created_at: Time.now.iso8601, results: results } File.write(baseline_file, JSON.pretty_generate(data)) end |