class Ukemi::Moderator

Public Class Methods

lookup(data) click to toggle source
# File lib/ukemi/moderator.rb, line 74
def lookup(data)
  new.lookup data
end

Public Instance Methods

convert_to_date(time) click to toggle source
# File lib/ukemi/moderator.rb, line 67
def convert_to_date(time)
  return nil unless time

  Time.at(time).to_date.to_s
end
convert_to_unixtime(date) click to toggle source
# File lib/ukemi/moderator.rb, line 61
def convert_to_unixtime(date)
  return nil unless date

  Time.parse(date).to_i
end
format(records) click to toggle source
# File lib/ukemi/moderator.rb, line 24
def format(records)
  memo = Hash.new { |h, k| h[k] = [] }

  records.each do |record|
    memo[record.data] << {
      first_seen: record.first_seen,
      last_seen: record.last_seen,
      source: record.source
    }
  end
  # Merge first seen last seen and make the sources a list.
  formatted = memo.map do |key, sources|
    first_seens = sources.filter_map { |record| convert_to_unixtime record[:first_seen] }
    last_seens = sources.filter_map { |record| convert_to_unixtime record[:last_seen] }
    [
      key,
      {
        first_seen: convert_to_date(first_seens.min),
        last_seen: convert_to_date(last_seens.max),
        sources: sources
      }
    ]
  end.to_h

  # Sorting
  ordering_key = Ukemi.configuration.ordering_key.to_sym
  sort_order = Ukemi.configuration.sort_order
  formatted.sort_by do |_key, hash|
    value = hash[ordering_key]
    if sort_order == "DESC"
      value ? -convert_to_unixtime(value) : -1
    else
      value ? convert_to_unixtime(value) : Float::MAX.to_i
    end
  end.to_h
end
lookup(data) click to toggle source
# File lib/ukemi/moderator.rb, line 9
def lookup(data)
  records = Parallel.map(Ukemi.services) do |klass|
    service = klass.new
    next unless service.configurated?

    begin
      service.lookup data
    rescue ::PassiveTotal::Error, ::VirusTotal::Error, ::SecurityTrails::Error, PassiveCIRCL::Error, DNSDB::Error, Faraday::Error
      nil
    end
  end.flatten.compact

  format records
end