Sha256: 9177a735df1b2f3df709f4569925cdd6d4c9f959d8350cf75d40958321a3ad25

Contents?: true

Size: 1.64 KB

Versions: 12

Compression:

Stored size: 1.64 KB

Contents

# frozen_string_literal: true

require "mihari/schemas/analyzer"
require "mihari/schemas/emitter"
require "mihari/schemas/enricher"

module Mihari
  module Schemas
    Rule = Dry::Schema.Params do
      required(:id).filled(:string)
      required(:title).filled(:string)
      required(:description).filled(:string)

      optional(:author).filled(:string)
      optional(:status).filled(:string)

      optional(:tags).array { filled(:string) }.default([])
      optional(:references).array { filled(:string) }
      optional(:related).array { filled(:string) }

      optional(:created_on).value(:date)
      optional(:updated_on).value(:date)

      required(:queries).array { Analyzer }
      optional(:emitters).array { Emitter }.default(DEFAULT_EMITTERS)
      optional(:enrichers).array { Enricher }.default(DEFAULT_ENRICHERS)

      optional(:data_types).filled(array[Types::DataTypes]).default(Mihari::Types::DataTypes.values)

      optional(:falsepositives).array { filled(:string) }.default([])

      optional(:artifact_ttl).value(:integer)
    end

    #
    # Rule schema contract
    #
    class RuleContract < Dry::Validation::Contract
      include Mihari::Concerns::FalsePositiveValidatable

      params(Rule)

      rule(:falsepositives) do
        value.each do |v|
          key.failure("#{v} is not a valid format") unless valid_falsepositive?(v)
        end
      end

      rule(:emitters) do
        emitters = value.filter_map { |v| v[:emitter] }
        unless emitters.include?(Mihari::Emitters::Database.key)
          key.failure("Emitter:#{Mihari::Emitters::Database.key} should be included in emitters")
        end
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
mihari-8.0.2 lib/mihari/schemas/rule.rb
mihari-8.0.1 lib/mihari/schemas/rule.rb
mihari-8.0.0 lib/mihari/schemas/rule.rb
mihari-7.6.4 lib/mihari/schemas/rule.rb
mihari-7.6.3 lib/mihari/schemas/rule.rb
mihari-7.6.2 lib/mihari/schemas/rule.rb
mihari-7.6.1 lib/mihari/schemas/rule.rb
mihari-7.6.0 lib/mihari/schemas/rule.rb
mihari-7.5.0 lib/mihari/schemas/rule.rb
mihari-7.4.0 lib/mihari/schemas/rule.rb
mihari-7.3.2 lib/mihari/schemas/rule.rb
mihari-7.3.1 lib/mihari/schemas/rule.rb