Sha256: 768cd4dd66d38d4925427c47e08017e2f342304381b671e5396616703ebd2cf6

Contents?: true

Size: 1.83 KB

Versions: 1

Compression:

Stored size: 1.83 KB

Contents

# frozen_string_literal: true

module Mihari
  module Analyzers
    class Base
      def initialize
        @the_hive = TheHive.new
        @cache = Cache.new
      end

      # @return [Array<String>, Array<Mihari::Artifact>]
      def artifacts
        raise NotImplementedError, "You must implement #{self.class}##{__method__}"
      end

      # @return [String]
      def title
        self.class.to_s.split("::").last
      end

      # @return [String]
      def description
        raise NotImplementedError, "You must implement #{self.class}##{__method__}"
      end

      # @return [Array<String>]
      def tags
        []
      end

      def run
        Mihari.emitters.each do |emitter_class|
          emitter = emitter_class.new
          next unless emitter.valid?

          run_emitter emitter
        end

        save_as_cache unique_artifacts.map(&:data)
      end

      def run_emitter(emitter)
        emitter.emit(title: title, description: description, artifacts: unique_artifacts, tags: tags)
      rescue StandardError => e
        puts "Emission by #{emitter.class} is failed: #{e}"
      end

      private

      # @return [Array<Mihari::Artifact>]
      def normalized_artifacts
        @normalized_artifacts ||= artifacts.map do |artifact|
          artifact.is_a?(Artifact) ? artifact : Artifact.new(artifact)
        end.select(&:valid?)
      end

      def uncached_artifacts
        @uncached_artifacts ||= normalized_artifacts.reject do |artifact|
          @cache.cached? artifact.data
        end
      end

      # @return [Array<Mihari::Artifact>]
      def unique_artifacts
        return uncached_artifacts unless @the_hive.valid?

        @unique_artifacts ||= @the_hive.artifact.find_non_existing_artifacts(uncached_artifacts)
      end

      def save_as_cache(data)
        @cache.save data
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mihari-0.8.1 lib/mihari/analyzers/base.rb