Sha256: 1ebc9571f3cf01ecfaab8cc6a636e3158b5998520e2f5db019aab0c64c8d2d4f

Contents?: true

Size: 1.88 KB

Versions: 14

Compression:

Stored size: 1.88 KB

Contents

# frozen_string_literal: true

module Mihari
  module Services
    class ResultValue
      # @return [Array<Object>]
      attr_reader :results

      # @return [Integer]
      attr_reader :total

      # @return [Mihari::Structs::Filters::Search]
      attr_reader :filter

      #
      # @param [Array<Object>] results
      # @param [Integer] total
      # @param [Mihari::Structs::Filters::Search] filter
      #
      def initialize(results:, total:, filter:)
        @results = results
        @total = total
        @filter = filter
      end
    end

    class BaseSearcher < Service
      #
      # @param [Hash] params
      #
      # @return [ResultValue]
      #
      def call(params)
        filter = build_filter(params)
        ResultValue.new(
          total: klass.count_by_filter(filter),
          results: klass.search_by_filter(filter),
          filter: filter
        )
      end

      private

      #
      # @param [Hash] params
      #
      # @return [Mihari::Structs::Filters::Search]
      #
      def build_filter(params)
        normalized = params.to_h.to_snake_keys.symbolize_keys
        Structs::Filters::Search.new(**normalized)
      end
    end

    class AlertSearcher < BaseSearcher
      def klass
        Models::Alert
      end
    end

    class ArtifactSearcher < BaseSearcher
      def klass
        Models::Artifact
      end
    end

    class RuleSearcher < BaseSearcher
      def klass
        Models::Rule
      end
    end

    class TagSearcher < BaseSearcher
      def klass
        Models::Tag
      end
    end

    class ConfigSearcher < Service
      #
      # @return [Array<Mihari::Structs::Config>]
      #
      def call
        # NOTE: literally it does not search but list configs
        (Mihari.analyzers + Mihari.emitters + Mihari.enrichers).filter_map do |klass|
          Mihari::Structs::Config.from_class klass
        end
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
mihari-7.3.2 lib/mihari/services/searchers.rb
mihari-7.3.1 lib/mihari/services/searchers.rb
mihari-7.3.0 lib/mihari/services/searchers.rb
mihari-7.2.0 lib/mihari/services/searchers.rb
mihari-7.1.3 lib/mihari/services/searchers.rb
mihari-7.1.2 lib/mihari/services/searchers.rb
mihari-7.1.1 lib/mihari/services/searchers.rb
mihari-7.1.0 lib/mihari/services/searchers.rb
mihari-7.0.5 lib/mihari/services/searchers.rb
mihari-7.0.4 lib/mihari/services/searchers.rb
mihari-7.0.3 lib/mihari/services/searchers.rb
mihari-7.0.2 lib/mihari/services/searchers.rb
mihari-7.0.1 lib/mihari/services/searchers.rb
mihari-7.0.0 lib/mihari/services/searchers.rb