Sha256: cd69443c00a1a08bb180554566f9b8e67d04c2356a1c702c4035c513706a59ef
Contents?: true
Size: 1.67 KB
Versions: 3
Compression:
Stored size: 1.67 KB
Contents
#!/usr/bin/env ruby # frozen_string_literal: true require 'set' require_relative 'model' class InsightVMApi @site_targets = nil def fetch_site_included_targets(site_id) fetch_site_targets(site_id, included: true) end def fetch_site_excluded_targets(site_id) fetch_site_targets(site_id, included: false) end # Returns included and excluded targets for site id def fetch_all_targets(site_id) [true, false].reduce([]) do |accu, included| accu + fetch_site_targets(site_id, included:) end end def fetch_site_target_domains(site_id) targets = fetch_site_included_targets(site_id) hosts = targets.select { |target| target.type == 'host' } # remove the host part of the fqdns hosts.each_with_object(Set.new) do |host, accu| domain = remove_first_part(host.target) accu.add domain unless domain.nil? || domain.blank? end end private def fetch_site_targets(site_id, included: true) addresses = [] targets = included ? 'included_targets' : 'excluded_targets' endpoint = "/sites/#{site_id}/#{targets}" fetch(endpoint) do |resource| addresses = resource['addresses'] end return [] if addresses.nil? addresses.map do |target| type = contains_letters?(target) ? 'host' : 'ip' SiteTarget.new({ site_id:, target:, type:, included:, scope: nil }) end end def contains_letters?(address) address.chars.any? { |char| char.match?(/[a-zA-Z]/) } end def remove_first_part(fqdn) parts = fqdn.split('.') parts.drop(1).join('.') end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
avs-0.1.3 | lib/domain/site_target/api.rb |
avs-0.1.2 | lib/domain/site_target/api.rb |
avs-0.1.1 | lib/domain/site_target/api.rb |