#!/usr/bin/env ruby
# Executable to lookup then merge site tech details into the RHPG asset spreadsheet in CSV format only
#
## Usage: RHPG [RHPG.csv]
require "wmap"
require "csv"
include Wmap::Utils

def print_usage
	puts "Program to lookup then merge the site details into RHPG asset spreadsheet. \nUsage: RHPG [RHPG.csv]"
end

def site_lookup(domain)
  tracker=Wmap::SiteTracker.new(:verbose=>false)
  #first order search
  tracker.known_sites.each do |key,val|
    if key.include?(domain.strip.downcase) && key.include?("https")
      tracker=nil
      return [key] + val.values
    end
  end
  #second order search
  tracker.known_sites.each do |key,val|
    if key.include?(domain.strip.downcase)
      tracker=nil
      return [key] + val.values
    end
  end
  tracker=nil
  return [nil]*9
end

def wp_site_lookup(domain)
  tracker=Wmap::WpTracker.new(:verbose=>false)
	# first order
	tracker.known_wp_sites.each do |key,val|
		if key.include?(domain.strip.downcase) && val
			ver=tracker.wp_ver(key)
			tracker=nil
			return [val,ver]
		end
	end
  # second order
  tracker.known_wp_sites.each do |key,val|
    if key.include?(domain.strip.downcase) && key.include?("https")
      tracker=nil
      return [val,nil]
    end
  end
  # third order
  tracker.known_wp_sites.each do |key,val|
    if key.include?(domain.strip.downcase)
      tracker=nil
      return [val,nil]
    end
  end
  tracker=nil
  return [nil,nil]
end

puts Wmap.banner
print_usage

# open output file to write
CSV.open("output.csv", "wb") do |csv|
  cnt=1
  # open RHPG input file to read
  CSV.foreach(ARGV[0]) do |row|
    puts "Processing row #{cnt}"
    #puts row.inspect
    my_row=Array.new
    if cnt > 1
      if is_domain?(row[0])
        my_row = row + site_lookup(row[0]) + wp_site_lookup(row[0])
      else
        my_row = row + [nil]*10
      end
    else
      my_row = row + ["Website","Primary IP","Port","Hosting Status","Server","Response Code","MD5 Finger-print","Redirection","Timestamp", "WordPress", "WordPress Version"]
    end
    cnt+=1
    csv << my_row
  end
  puts "All done. "
end