Skip to content

Commit

Permalink
Merge pull request #18 from ninoseki/add-verbose-mode
Browse files Browse the repository at this point in the history
feat: add --verbose option
  • Loading branch information
ninoseki committed Oct 29, 2019
2 parents 3392ec7 + 1c9ffe3 commit 494c494
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 6 deletions.
4 changes: 3 additions & 1 deletion lib/rogue_one/cli.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,14 @@ module RogueOne
class CLI < Thor
desc "report [DNS_SERVER]", "Show a report of a given DNS server"
method_option :custom_list, type: :string, desc: "A path to a custom list of domains"
method_option :verbose, type: :boolean
def report(dns_server)
with_error_handling do
Ping.pong? dns_server

custom_list = options["custom_list"]
detector = Detector.new(target: dns_server, custom_list: custom_list)
verbose = options["verbose"]
detector = Detector.new(target: dns_server, custom_list: custom_list, verbose: verbose)
puts JSON.pretty_generate(detector.report)
end
end
Expand Down
19 changes: 14 additions & 5 deletions lib/rogue_one/detector.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,23 @@ module RogueOne
class Detector
attr_reader :target
attr_reader :custom_list
attr_reader :verbose

GOOGLE_PUBLIC_DNS = "8.8.8.8"

def initialize(target:, custom_list: nil)
def initialize(target:, custom_list: nil, verbose: false)
@target = target
@custom_list = custom_list
@verbose = verbose

@memo = {}
@verbose_memo = nil
end

def report
inspect

{ verdict: verdict, landing_pages: landing_pages }
{ verdict: verdict, landing_pages: landing_pages, results: results }.compact
end

private
Expand All @@ -42,17 +46,22 @@ def landing_pages
end.compact.sort
end

def results
@verbose_memo
end

def inspect
return unless @memo.empty?

results = Parallel.map(domains) do |domain|
normal_result = normal_resolver.dig(domain, "A")
target_result = target_resolver.dig(domain, "A")

target_result if target_result && normal_result != target_result
end.compact
[domain, target_result] if target_result && normal_result != target_result
end.compact.to_h

@memo = results.group_by(&:itself).map { |k, v| [k, v.length] }.to_h
@memo = results.values.group_by(&:itself).map { |k, v| [k, v.length] }.to_h
@verbose_memo = results if verbose
end

def domains
Expand Down
9 changes: 9 additions & 0 deletions spec/detector_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,14 @@
expect(report.dig(:landing_pages)).to eq(memo.keys.sort)
end
end

context "when given --verbose option" do
subject { described_class.new(target: "1.1.1.1", verbose: true) }

it do
report = subject.report
expect(report.dig(:results)).to be_a(Hash)
end
end
end
end

0 comments on commit 494c494

Please sign in to comment.