5e495d72f5
When passed arguments as `opts` prefer to avoid side-effects from method execution. This extends similar work from #12740
67 lines
1.8 KiB
Ruby
67 lines
1.8 KiB
Ruby
module Msf::DBManager::Payload
|
|
|
|
def create_payload(opts)
|
|
::ApplicationRecord.connection_pool.with_connection do
|
|
if opts[:uuid] && !opts[:uuid].to_s.empty?
|
|
if Mdm::Payload.find_by(uuid: opts[:uuid])
|
|
raise ArgumentError.new("A payload with this uuid already exists.")
|
|
end
|
|
end
|
|
|
|
Mdm::Payload.create!(opts)
|
|
end
|
|
end
|
|
|
|
def payloads(opts)
|
|
::ApplicationRecord.connection_pool.with_connection do
|
|
if opts[:id] && !opts[:id].to_s.empty?
|
|
return Array.wrap(Mdm::Payload.find(opts[:id]))
|
|
else
|
|
# Check the database for a matching UUID, returning an empty array if no results are found
|
|
begin
|
|
return Array.wrap(Mdm::Payload.where(uuid: opts[:uuid]))
|
|
rescue ActiveRecord::RecordNotFound
|
|
return []
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def update_payload(opts)
|
|
::ApplicationRecord.connection_pool.with_connection do
|
|
opts = opts.clone() # protect the original caller's opts
|
|
id = opts.delete(:id)
|
|
Mdm::Payload.update(id, opts)
|
|
end
|
|
end
|
|
|
|
def delete_payload(opts)
|
|
raise ArgumentError.new("The following options are required: :ids") if opts[:ids].nil?
|
|
|
|
::ApplicationRecord.connection_pool.with_connection do
|
|
deleted = []
|
|
opts[:ids].each do |payload_id|
|
|
payload = Mdm::Payload.find(payload_id)
|
|
begin
|
|
deleted << payload.destroy
|
|
rescue
|
|
elog("Forcibly deleting #{payload}")
|
|
deleted << payload.delete
|
|
end
|
|
end
|
|
|
|
return deleted
|
|
end
|
|
end
|
|
|
|
def get_payload(opts)
|
|
raise ArgumentError.new("The following options are required: :uuid") if opts[:uuid].nil?
|
|
|
|
::ApplicationRecord.connection_pool.with_connection do
|
|
return Mdm::Payload.find_by(uuid: opts[:uuid])
|
|
end
|
|
|
|
end
|
|
|
|
end
|