Files
metasploit-gs/lib/msf/core/modules/external.rb
T
Adam Cammack 271a2344db Refactor external module API to be more reliable
Also:
  Grabs exit status
  Less boilerplate required for modules
2018-05-09 13:30:13 -05:00

51 lines
937 B
Ruby

# -*- coding: binary -*-
# Namespace for loading external Metasploit modules
class Msf::Modules::External
autoload :Bridge, 'msf/core/modules/external/bridge'
autoload :Message, 'msf/core/modules/external/message'
attr_reader :path
def meta
@meta ||= describe
end
def initialize(module_path, framework: nil)
self.path = module_path
self.framework = framework
end
def exec(method: :run, args: {}, &block)
req = Message.new(method)
req.params = args.dup
b = Bridge.open(self.path, framework: self.framework).exec(req)
if block
begin
while m = b.messages.pop
block.call m
end
ensure
b.close
end
return b.success?
else
return b
end
end
protected
attr_writer :path
attr_accessor :framework
def describe
exec method: :describe do |msg|
return msg.params if msg.method == :reply
end
end
end