class Dradis::Plugins::Mediawiki::Filters::FullTextSearch

Public Instance Methods

query(params={}) click to toggle source
# File lib/dradis/plugins/mediawiki/filters.rb, line 3
def query(params={})
  results = []

  host   = Dradis::Plugins::Mediawiki::Engine.settings.host
  path   = Dradis::Plugins::Mediawiki::Engine.settings.path
  port   = Dradis::Plugins::Mediawiki::Engine.settings.port
  scheme = Dradis::Plugins::Mediawiki::Engine.settings.scheme

  port   = (scheme == 'https' ? 443 : 80) if port.blank?

  begin
    # Parameters required by MediaWiki API
    # http://localhost/mediawiki-1.21.1/api.php?action=query&prop=revisions&generator=search&gsrwhat=text&gsrsearch=Directory&rvprop=content&format=xml
    filter_params = {
         action: 'query',
           prop: 'revisions',
      generator: 'search',
        gsrwhat: 'text',
      gsrsearch: CGI::escape(params[:query]), # user query
         rvprop: 'content',
         format: 'xml'
    }

    # Get the results over HTTP
    Net::HTTP.start(host, port, use_ssl: scheme == 'https') do |http|
      res = http.get("#{path}?#{filter_params.to_query}")
      xml_doc = Nokogiri::XML( res.body )
      results += xml_doc.xpath('api/query/pages/page').map do |xml_page|
        Dradis::Plugins::Import::Result.new(
                title: xml_page[:title],
          description: fields_from_wikitext(xml_page.at_xpath('revisions/rev').text())
        )
      end
    end

  #rescue Exception => e
  #  records << {
  #              :title => 'Error fetching records',
  #              :description => e.message + "\n\n\n" +
  #                            "This error can be cause by a configuration " +
  #                            "issue (i.e. dradis not finding the MediaWiki instance). " +
  #                            "Please review the configuration settings located at:\n\n" +
  #                            "./server/vendor/plugins/wiki_import/lib/wiki_import/filters.rb"
  #             }
  end

  return results
end

Private Instance Methods

fields_from_wikitext(wikitext) click to toggle source

WikiMedia has its own formatting, and there are some tweaks we need to do to addapt it to standard dradis convention.

# File lib/dradis/plugins/mediawiki/filters.rb, line 55
def fields_from_wikitext(wikitext)
  fields = Dradis::Plugins::Mediawiki::Engine::settings.fields

  dradis_fields = wikitext
  fields = fields.split(',')
  fields.each do |f|
    dradis_fields.sub!( /=+#{f}=+/, "#[#{f}]#" )
  end
  return dradis_fields
end