Sha256: 70482ecf14601c5eb436468d801b4c31dde45876dcb51eef27a152b0f0d2aa43

Contents?: true

Size: 1.78 KB

Versions: 13

Compression:

Stored size: 1.78 KB

Contents

# frozen_string_literal: true

module Mihari
  module Structs
    module VirusTotalIntelligence
      class ContextAttributes < Dry::Struct
        attribute :url, Types.Array(Types::String).optional

        def self.from_dynamic!(d)
          d = Types::Hash[d]
          new(
            url: d["url"]
          )
        end
      end

      class Datum < Dry::Struct
        attribute :type, Types::String
        attribute :id, Types::String
        attribute :context_attributes, ContextAttributes.optional
        attribute :metadata, Types::Hash

        def value
          case type
          when "file"
            id
          when "url"
            (context_attributes.url || []).first
          when "domain"
            id
          when "ip_address"
            id
          end
        end

        def self.from_dynamic!(d)
          d = Types::Hash[d]

          context_attributes = nil
          context_attributes = ContextAttributes.from_dynamic!(d.fetch("context_attributes")) if d.key?("context_attributes")

          new(
            type: d.fetch("type"),
            id: d.fetch("id"),
            context_attributes: context_attributes,
            metadata: d
          )
        end
      end

      class Meta < Dry::Struct
        attribute :cursor, Types::String.optional

        def self.from_dynamic!(d)
          d = Types::Hash[d]
          new(
            cursor: d["cursor"]
          )
        end
      end

      class Response < Dry::Struct
        attribute :meta, Meta
        attribute :data, Types.Array(Datum)

        def self.from_dynamic!(d)
          d = Types::Hash[d]
          new(
            meta: Meta.from_dynamic!(d.fetch("meta")),
            data: d.fetch("data").map { |x| Datum.from_dynamic!(x) }
          )
        end
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
mihari-4.6.0 lib/mihari/structs/virustotal_intelligence.rb
mihari-4.5.3 lib/mihari/structs/virustotal_intelligence.rb
mihari-4.5.2 lib/mihari/structs/virustotal_intelligence.rb
mihari-4.5.1 lib/mihari/structs/virustotal_intelligence.rb
mihari-4.5.0 lib/mihari/structs/virustotal_intelligence.rb
mihari-4.4.1 lib/mihari/structs/virustotal_intelligence.rb
mihari-4.4.0 lib/mihari/structs/virustotal_intelligence.rb
mihari-4.3.0 lib/mihari/structs/virustotal_intelligence.rb
mihari-4.2.0 lib/mihari/structs/virustotal_intelligence.rb
mihari-4.1.2 lib/mihari/structs/virustotal_intelligence.rb
mihari-4.1.1 lib/mihari/structs/virustotal_intelligence.rb
mihari-4.1.0 lib/mihari/structs/virustotal_intelligence.rb
mihari-4.0.0 lib/mihari/structs/virustotal_intelligence.rb