class Dradis::Plugins::MappingService

Attributes

component[RW]
destination[RW]
integration[RW]
source[RW]

Public Class Methods

new(destination: nil, integration:) click to toggle source
# File lib/dradis/plugins/mapping_service.rb, line 6
def initialize(destination: nil, integration:)
  @destination = destination
  @integration = integration
  @component = @integration.meta[:name].to_s
  @sample_dir = default_sample_dir
end

Public Instance Methods

apply_mapping(data:, source:, mapping_fields: nil) click to toggle source
# File lib/dradis/plugins/mapping_service.rb, line 13
def apply_mapping(data:, source:, mapping_fields: nil)
  @source = source
  return unless valid_source?

  field_processor = integration::FieldProcessor.new(data: data)
  mapping_fields = mapping_fields || get_mapping_fields

  mapping_fields.map do |field|
    field_name = field.destination_field
    field_content = process_content(
      field.content,
      field_processor
    )

    "#[#{field_name}]#\n#{field_content}"
  end&.join("\n\n")
end
sample() click to toggle source

This returns a sample of valid entry for the Mappings Manager

# File lib/dradis/plugins/mapping_service.rb, line 32
def sample
  @sample ||= {}
  if valid_source?
    @sample[source] ||= begin
      sample_file = File.join(@sample_dir, "#{source}.sample")
      File.read(sample_file)
    end
  end
end

Private Instance Methods

default_sample_dir() click to toggle source

This method returns the default location in which integrations store their sample files

# File lib/dradis/plugins/mapping_service.rb, line 45
def default_sample_dir
  @default_sample_dir ||= begin
    File.join(Configuration.paths_templates_plugins, component)
  end
end
get_mapping_fields() click to toggle source
# File lib/dradis/plugins/mapping_service.rb, line 51
def get_mapping_fields
  # returns the mapping fields for the found mapping,
  # or the default mapping_fields
  integration.mapping_fields(
    source: source,
    destination: destination
  )
end
process_content(content, field_processor) click to toggle source
# File lib/dradis/plugins/mapping_service.rb, line 60
def process_content(content, field_processor)
  content.gsub(/{{\s?#{component}\[(\S*?)\]\s?}}/) do |field|
    name = field.split(/\[|\]/)[1]

    if integration.source_fields(source).include?(name)
      field_processor.value(field: name)
    else
      "Field [#{field}] not recognized by the integration"
    end
  end
end
valid_source?() click to toggle source
# File lib/dradis/plugins/mapping_service.rb, line 72
def valid_source?
  @source = source if integration.mapping_sources.include?(source.to_sym)
end