rapid7/metasploit-framework

View on GitHub
lib/msf/core/db_manager/ref.rb

Summary

Maintainability
A
1 hr
Test Coverage
module Msf::DBManager::Ref
  #
  # Find or create a reference matching this name
  #
  def find_or_create_ref(opts)
    ret = {}

  ::ApplicationRecord.connection_pool.with_connection {
    if opts[:id] && !opts[:id].to_s.empty?
      return Mdm::Ref.find(opts[:id])
    end

    if opts[:ref]
      return get_ref(opts[:name])
    end

    ref = ::Mdm::Ref.where(name: opts[:name]).first_or_initialize

    begin
      framework.events.on_db_ref(ref) if ref
    rescue ::Exception => e
      wlog("Exception in on_db_ref event handler: #{e.class}: #{e}")
      wlog("Call Stack\n#{e.backtrace.join("\n")}")
    end

    if ref and ref.changed?
      ref.save!
    end
    ref
  }
  end

  def get_ref(name)
  ::ApplicationRecord.connection_pool.with_connection {
    ::Mdm::Ref.find_by_name(name)
  }
  end

  #
  # Find a reference matching this name
  #
  def has_ref?(name)
  ::ApplicationRecord.connection_pool.with_connection {
    Mdm::Ref.find_by_name(name)
  }
  end
end