Class: Hedra::BaselineCLI

Inherits:
Thor
  • Object
show all
Defined in:
lib/hedra/cli.rb

Instance Method Summary collapse

Instance Method Details

#compare(name, target) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/hedra/cli.rb', line 64

def compare(name, target)
  baseline = Baseline.new
  urls = options[:file] ? File.readlines(target).map(&:strip).reject(&:empty?) : [target]

  client = HttpClient.new
  analyzer = Analyzer.new
  current_results = []

  urls.each do |url|
    response = client.get(url)
    result = analyzer.analyze(url, response.headers.to_h)
    current_results << result
  rescue StandardError => e
    warn "Failed to scan #{url}: #{e.message}"
  end

  comparisons = baseline.compare(name, current_results)
  print_comparisons(comparisons)

  if options[:output]
    File.write(options[:output], JSON.pretty_generate(comparisons))
    puts "Comparison saved to #{options[:output]}"
  end
rescue StandardError => e
  warn "Comparison failed: #{e.message}"
  exit 1
end

#delete(name) ⇒ Object



93
94
95
96
97
98
99
100
# File 'lib/hedra/cli.rb', line 93

def delete(name)
  baseline = Baseline.new
  baseline.delete(name)
  puts "Baseline deleted: #{name}"
rescue StandardError => e
  warn "Failed to delete baseline: #{e.message}"
  exit 1
end

#listObject



47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/hedra/cli.rb', line 47

def list
  baseline = Baseline.new
  baselines = baseline.list

  if baselines.empty?
    puts 'No baselines saved.'
  else
    puts 'Saved baselines:'
    baselines.each do |b|
      puts "  - #{b[:name]} (#{b[:url_count]} URLs, created: #{b[:created_at]})"
    end
  end
end