Sha256: eb46ecc0af59776c95f815c7ef5fd3783d62d2dd930162e96da6003de133dd2c

Contents?: true

Size: 1.6 KB

Versions: 1

Compression:

Stored size: 1.6 KB

Contents

# frozen_string_literal: true

require "date"
require "otx_ruby"

module Ukemi
  module Services
    class OTX < Service
      private

      def config_keys
        %w[OTX_API_KEY]
      end

      def api_key
        @api_key ||= ENV["OTX_API_KEY"]
      end

      def domain_client
        @domain_client ||= ::OTX::Domain.new(api_key)
      end

      def ip_client
        @ip_client ||= ::OTX::IP.new(api_key)
      end

      def lookup_by_ip(data)
        records = ip_client.get_passive_dns(data)
        memo = Hash.new { |h, k| h[k] = [] }
        records.each do |record|
          next if record.record_type != "A"

          domain = record.hostname
          memo[domain] << Date.parse(record.last).to_s
          memo[domain] << Date.parse(record.first).to_s
        end

        memo.keys.map do |domain|
          Record.new(
            data: domain,
            first_seen: memo[domain].min,
            last_seen: memo[domain].max,
            source: name
          )
        end
      end

      def lookup_by_domain(data)
        records = domain_client.get_passive_dns(data)

        memo = Hash.new { |h, k| h[k] = [] }
        records.each do |record|
          next if record.record_type != "A"
          next if record.hostname != data

          ip = record.address
          memo[ip] << Date.parse(record.last).to_s
          memo[ip] << Date.parse(record.first).to_s
        end

        memo.keys.map do |ip|
          Record.new(
            data: ip,
            first_seen: memo[ip].min,
            last_seen: memo[ip].max,
            source: name
          )
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ukemi-0.4.1 lib/ukemi/services/otx.rb