44 lines
854 B
Ruby
44 lines
854 B
Ruby
# -*- coding: binary -*-
|
|
require 'base64'
|
|
require 'json'
|
|
require 'securerandom'
|
|
|
|
class Msf::Modules::External::Message
|
|
|
|
attr_reader :method
|
|
attr_accessor :params, :id
|
|
|
|
def self.from_module(j)
|
|
if j['method']
|
|
m = self.new(j['method'].to_sym)
|
|
m.params = j['params']
|
|
m
|
|
elsif j['result']
|
|
m = self.new(:reply)
|
|
m.params = j['result']
|
|
m.id = j['id']
|
|
m
|
|
end
|
|
end
|
|
|
|
def initialize(m)
|
|
self.method = m
|
|
self.params = {}
|
|
self.id = Base64.strict_encode64(SecureRandom.random_bytes(16))
|
|
end
|
|
|
|
def to_json
|
|
params =
|
|
if self.params.respond_to? :to_external_message_h
|
|
self.params.to_external_message_h
|
|
else
|
|
self.params.to_h
|
|
end
|
|
JSON.generate({jsonrpc: '2.0', id: self.id, method: self.method, params: params})
|
|
end
|
|
|
|
protected
|
|
|
|
attr_writer :method
|
|
end
|