Sha256: 4b3739bcd794ea2622eb85f3efe0f0649c1717e1e14deee11575fcb9c23a7ca0

Contents?: true

Size: 1.59 KB

Versions: 11

Compression:

Stored size: 1.59 KB

Contents

# frozen_string_literal: true

module Mihari
  module Services
    #
    # Alert proxy
    #
    class AlertProxy
      # @return [Hash]
      attr_reader :data

      # @return [Array, nil]
      attr_reader :errors

      #
      # Initialize
      #
      # @param [Hash] data
      #
      def initialize(**data)
        super()

        @data = data.deep_symbolize_keys
        @errors = nil

        validate!
      end

      #
      # @return [Boolean]
      #
      def errors?
        return false if errors.nil?

        !errors.empty?
      end

      def validate!
        contract = Schemas::AlertContract.new
        result = contract.call(data)

        @data = result.to_h
        @errors = result.errors

        raise ValidationError.new("Validation failed", errors) if errors?
      end

      def [](key)
        data key.to_sym
      end

      #
      # @return [String]
      #
      def rule_id
        @rule_id ||= data[:rule_id]
      end

      #
      # @return [Array<Mihari::Models::Artifact>]
      #
      def artifacts
        @artifacts ||= data[:artifacts].map do |data|
          artifact = Models::Artifact.new(data:)
          artifact.rule_id = rule_id
          artifact.source = source
          artifact
        end.uniq(&:data).select(&:valid?)
      end

      #
      # @return [String, nil]
      #
      def source
        @source ||= data[:source]
      end

      #
      # @return [Mihari::Rule]
      #
      def rule
        @rule ||= lambda do
          data = Mihari::Models::Rule.find(rule_id).data
          Rule.new(**data)
        end.call
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
mihari-8.1.0 lib/mihari/services/proxies.rb
mihari-8.0.2 lib/mihari/services/proxies.rb
mihari-8.0.1 lib/mihari/services/proxies.rb
mihari-8.0.0 lib/mihari/services/proxies.rb
mihari-7.6.4 lib/mihari/services/proxies.rb
mihari-7.6.3 lib/mihari/services/proxies.rb
mihari-7.6.2 lib/mihari/services/proxies.rb
mihari-7.6.1 lib/mihari/services/proxies.rb
mihari-7.6.0 lib/mihari/services/proxies.rb
mihari-7.5.0 lib/mihari/services/proxies.rb
mihari-7.4.0 lib/mihari/services/proxies.rb