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