74 lines
2.2 KiB
Ruby
74 lines
2.2 KiB
Ruby
load 'active_record/railties/databases.rake'
|
|
|
|
require 'metasploit/framework'
|
|
require 'metasploit/framework/database'
|
|
|
|
# A modification to remove dependency on Rails.env
|
|
#
|
|
# @see https://github.com/rails/rails/blob/ddce29bfa12462fde2342a0c2bd0eefd420c0eab/activerecord/lib/active_record/railties/databases.rake#L550
|
|
def configs_for_environment
|
|
environments = [Metasploit::Framework.env]
|
|
|
|
if Metasploit::Framework.env.development?
|
|
environments << 'test'
|
|
end
|
|
|
|
environment_configurations = ActiveRecord::Base.configurations.values_at(*environments)
|
|
present_environment_configurations = environment_configurations.compact
|
|
valid_environment_configurations = present_environment_configurations.reject { |config|
|
|
config['database'].blank?
|
|
}
|
|
|
|
valid_environment_configurations
|
|
end
|
|
|
|
# emulate initializer "active_record.initialize_database" from active_record/railtie
|
|
ActiveSupport.on_load(:active_record) do
|
|
self.configurations = Metasploit::Framework::Database.configurations
|
|
puts "Connecting to database specified by #{Metasploit::Framework::Database.configurations_pathname}"
|
|
|
|
spec = configurations[Metasploit::Framework.env]
|
|
establish_connection(spec)
|
|
end
|
|
|
|
#
|
|
# Remove tasks that aren't supported
|
|
#
|
|
|
|
Rake::TaskManager.class_eval do
|
|
def remove_task(task_name)
|
|
@tasks.delete(task_name.to_s)
|
|
end
|
|
end
|
|
|
|
Rake.application.remove_task('db:fixtures:load')
|
|
|
|
# completely replace db:load_config and db:seed as they will attempt to use
|
|
# Rails.application, which does not exist
|
|
Rake::Task['db:load_config'].clear
|
|
Rake::Task['db:seed'].clear
|
|
|
|
db_namespace = namespace :db do
|
|
task :load_config do
|
|
ActiveRecord::Base.configurations = Metasploit::Framework::Database.configurations
|
|
|
|
ActiveRecord::Migrator.migrations_paths = [
|
|
# rails isn't in Gemfile, so can't use the more appropriate
|
|
# Metasploit::Engine.instance.paths['db/migrate'].to_a since using
|
|
# Metasploit::Engine requires rails.
|
|
MetasploitDataModels.root.join('db', 'migrate').to_s
|
|
]
|
|
end
|
|
|
|
desc 'Load the seed data from db/seeds.rb'
|
|
task :seed do
|
|
db_namespace['abort_if_pending_migrations'].invoke
|
|
seeds_pathname = Metasploit::Framework.root.join('db', 'seeds.rb')
|
|
|
|
if seeds_pathname.exist?
|
|
load(seeds_pathname)
|
|
end
|
|
end
|
|
end
|
|
|