Sha256: cd5edfa514d1f75cc7240e737709e887108f20afb41b12942baff04e55d5280e

Contents?: true

Size: 1.79 KB

Versions: 3

Compression:

Stored size: 1.79 KB

Contents

# frozen_string_literal: true

module Mihari
  module Commands
    module Search
      include Mixins::Database
      include Mixins::ErrorNotification

      def self.included(thor)
        thor.class_eval do
          desc "search [RULE]", "Search by a rule"
          method_option :yes, type: :boolean, aliases: "-y", desc: "yes to overwrite the rule in the database"
          def search_by_rule(path_or_id)
            rule = Structs::Rule.from_path_or_id path_or_id

            # validate
            begin
              rule.validate!
            rescue RuleValidationError
              return
            end

            # check update
            id = rule.id
            yes = options["yes"] || false
            unless yes
              with_db_connection do
                rule_ = Mihari::Rule.find(id)
                next if rule.yaml == rule_.yaml
                unless yes?("This operation will overwrite the rule in the database (Rule ID: #{id}). Are you sure you want to update the rule? (yes/no)")
                  return
                end
              rescue ActiveRecord::RecordNotFound
                next
              end
            end

            analyzer = rule.to_analyzer

            with_error_notification do
              alert = analyzer.run

              if alert
                data = Mihari::Entities::Alert.represent(alert)
                puts JSON.pretty_generate(data.as_json)
              else
                Mihari.logger.info "No new alert created in the database"
              end

              # record a rule
              with_db_connection do
                model = rule.to_model
                model.save
              rescue ActiveRecord::RecordNotUnique
                nil
              end
            end
          end
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
mihari-4.12.0 lib/mihari/commands/search.rb
mihari-4.11.0 lib/mihari/commands/search.rb
mihari-4.10.0 lib/mihari/commands/search.rb