class Arachni::Data::Plugins
@author Tasos “Zapotek” Laskos <tasos.laskos@arachni-scanner.com>
Attributes
results[R]
@return [Hash<Symbol=>Hash>]
Plugin results.
Public Class Methods
load( directory )
click to toggle source
# File lib/arachni/data/plugins.rb, line 90 def self.load( directory ) plugins = new %w(results).each do |type| Dir["#{directory}/#{type}/*"].each do |plugin_directory| plugin = File.basename( plugin_directory ).to_sym plugins.send(type)[plugin] = Marshal.load( IO.binread( plugin_directory ) ) end end plugins end
new()
click to toggle source
Calls superclass method
# File lib/arachni/data/plugins.rb, line 23 def initialize super @results = {} end
Public Instance Methods
clear()
click to toggle source
# File lib/arachni/data/plugins.rb, line 103 def clear @results.clear end
dump( directory )
click to toggle source
# File lib/arachni/data/plugins.rb, line 79 def dump( directory ) %w(results).each do |type| send(type).each do |plugin, data| result_directory = "#{directory}/#{type}/" FileUtils.mkdir_p( result_directory ) IO.binwrite( "#{result_directory}/#{plugin}", Marshal.dump( data ) ) end end end
merge_results( plugins, results )
click to toggle source
Merges the {#results} with the provided ‘results` by delegating to each {Plugin::Base.distributable?} plugin’s {Plugin::Base.merge} method.
@param [Plugin:Manager] plugins @param [Array] results
# File lib/arachni/data/plugins.rb, line 51 def merge_results( plugins, results ) isolated_results = {} (results + [@results]).each do |result| result.each do |name, res| next if !res name = name.to_sym isolated_results[name] ||= [] isolated_results[name] << (res['results'] || res[:results]) end end isolated_results.each do |plugin, res| next if !plugins[plugin].distributable? begin store( plugins[plugin], plugins[plugin].merge( res ) ) rescue => e print_error "Could not merge plugin results for plugin '#{plugin}', " + "will only use local ones: #{e}" print_error_backtrace e end end nil end
statistics()
click to toggle source
# File lib/arachni/data/plugins.rb, line 29 def statistics { names: @results.keys } end
store( plugin, results )
click to toggle source
Registers plugin results.
@param [Arachni::Plugin::Base] plugin
Instance of a plugin.
@param [Object] results
# File lib/arachni/data/plugins.rb, line 40 def store( plugin, results ) synchronize do @results[plugin.shortname.to_sym] = plugin.info.merge( results: results ) end end