05f0d09828
On August 15, shuckins-r7 merged the Metasploit 4.10.0 branch (staging/electro-release) into master. Rather than merging with history, he squashed all history into two commits (see149c3ecc63and82760bf5b3). We want to preserve history (for things like git blame, git log, etc.). So on August 22, we reverted the commits above (see19ba7772f3). This merge commit merges the staging/electro-release branch (62b81d6814) into master (48f0743d1b). It ensures that any changes committed to master since the original squashed merge are retained. As a side effect, you may see this merge commit in history/blame for the time period between August 15 and August 22.
97 lines
3.5 KiB
Ruby
97 lines
3.5 KiB
Ruby
# @note needs to use explicit nesting. so this file can be loaded directly without loading 'metasploit/framework', this
|
|
# file can be used prior to Bundler.require.
|
|
module Metasploit
|
|
module Framework
|
|
# Extension to `Kernel#require` behavior.
|
|
module Require
|
|
#
|
|
# Module Methods
|
|
#
|
|
|
|
# Tries to require `name`. If a `LoadError` occurs, then `without_warning` is printed to standard error using
|
|
# `Kernel#warn`, along with instructions for reinstalling the bundle. If a `LoadError` does not occur, then
|
|
# `with_block` is called.
|
|
#
|
|
# @param name [String] the name of the library to `Kernel#require`.
|
|
# @param without_warning [String] warning to print if `name` cannot be required.
|
|
# @yield block to run when `name` requires successfully
|
|
# @yieldreturn [void]
|
|
# @return [void]
|
|
def self.optionally(name, without_warning)
|
|
begin
|
|
require name
|
|
rescue LoadError
|
|
warn without_warning
|
|
warn "Bundle installed '--without #{Bundler.settings.without.join(' ')}'"
|
|
warn "To clear the without option do `bundle install --without ''` " \
|
|
"(the --without flag with an empty string) or " \
|
|
"`rm -rf .bundle` to remove the .bundle/config manually and " \
|
|
"then `bundle install`"
|
|
else
|
|
if block_given?
|
|
yield
|
|
end
|
|
end
|
|
end
|
|
|
|
# Tries to `require 'active_record/railtie'` to define the activerecord Rails initializers and rake tasks.
|
|
#
|
|
# @example Optionally requiring 'active_record/railtie'
|
|
# require 'metasploit/framework/require'
|
|
#
|
|
# class MyClass
|
|
# def setup
|
|
# if database_enabled
|
|
# Metasploit::Framework::Require.optionally_active_record_railtie
|
|
# end
|
|
# end
|
|
# end
|
|
#
|
|
# @return [void]
|
|
def self.optionally_active_record_railtie
|
|
if ::File.exist?(Rails.application.config.paths['config/database'].first)
|
|
optionally(
|
|
'active_record/railtie',
|
|
'activerecord not in the bundle, so database support will be disabled.'
|
|
)
|
|
else
|
|
warn 'Could not find database.yml, so database support will be disabled.'
|
|
end
|
|
end
|
|
|
|
# Tries to `require 'metasploit/credential/creation'` and include it in the `including_module`.
|
|
#
|
|
# @param including_module [Module] `Class` or `Module` that wants to `include Metasploit::Credential::Creation`.
|
|
# @return [void]
|
|
def self.optionally_include_metasploit_credential_creation(including_module)
|
|
optionally(
|
|
'metasploit/credential/creation',
|
|
"metasploit-credential not in the bundle, so Metasploit::Credential creation will fail for #{including_module.name}",
|
|
) do
|
|
including_module.send(:include, Metasploit::Credential::Creation)
|
|
end
|
|
end
|
|
|
|
#
|
|
# Instance Methods
|
|
#
|
|
|
|
# Tries to `require 'metasploit/credential/creation'` and include it in this `Class` or `Module`.
|
|
#
|
|
# @example Using in a `Module`
|
|
# require 'metasploit/framework/require'
|
|
#
|
|
# module MyModule
|
|
# extend Metasploit::Framework::Require
|
|
#
|
|
# optionally_include_metasploit_credential_creation
|
|
# end
|
|
#
|
|
# @return [void]
|
|
def optionally_include_metasploit_credential_creation
|
|
Metasploit::Framework::Require.optionally_include_metasploit_credential_creation(self)
|
|
end
|
|
end
|
|
end
|
|
end
|