class ForemanOpenscap::BulkUpload

Attributes

from_scap_security_guide[RW]

Public Class Methods

new(from_scap_security_guide = false) click to toggle source
# File lib/foreman_openscap/bulk_upload.rb, line 5
def initialize(from_scap_security_guide = false)
  @from_scap_security_guide = from_scap_security_guide
end

Public Instance Methods

generate_scap_default_content() click to toggle source
# File lib/foreman_openscap/bulk_upload.rb, line 9
def generate_scap_default_content
  return unless @from_scap_security_guide

  if %x`rpm -qa | grep scap-security-guide`.empty?
    Rails.logger.debug "Can't find scap-security-guide RPM"
    return
  end

  files_array = %x`rpm -ql scap-security-guide | grep ds.xml`.split
  upload_from_files(files_array) unless files_array.empty?
end
upload_from_directory(directory_path) click to toggle source
# File lib/foreman_openscap/bulk_upload.rb, line 43
def upload_from_directory(directory_path)
  files_array = Dir["#{directory_path}/*-ds.xml"]
  upload_from_files(files_array) unless files_array.empty?
end
upload_from_files(files_array) click to toggle source
# File lib/foreman_openscap/bulk_upload.rb, line 21
def upload_from_files(files_array)
  files_array.each do |datastream|
    file = File.open(datastream, 'rb').read
    digest = Digest::SHA2.hexdigest(datastream)
    title = content_name(datastream)
    filename = original_filename(datastream)
    scap_content = ScapContent.where(:title => title, :digest => digest).first_or_initialize
    next if scap_content.persisted?
    scap_content.scap_file = file
    scap_content.original_filename = filename
    scap_content.location_ids = Location.all.map(&:id) if SETTINGS[:locations_enabled]
    scap_content.organization_ids = Organization.all.map(&:id) if SETTINGS[:organizations_enabled]

    next puts "## SCAP content is invalid: #{scap_content.errors.full_messages.uniq.join(',')} ##" unless scap_content.valid?
    if scap_content.save
      puts "Saved #{datastream} as #{scap_content.title}"
    else
      puts "Failed saving #{datastream}"
    end
  end
end

Private Instance Methods

content_name(datastream) click to toggle source
# File lib/foreman_openscap/bulk_upload.rb, line 60
def content_name(datastream)
  os_name = extract_name_from_file(datastream)
  @from_scap_security_guide ? "Red Hat #{os_name} default content" : "#{os_name} content"
end
extract_name_from_file(file) click to toggle source
# File lib/foreman_openscap/bulk_upload.rb, line 50
def extract_name_from_file(file)
  # SCAP datastream files are in format of ssg-<OS>-ds.xml
  # We wish to extract the <OS> and create a name of it
  original_filename(file).gsub('ssg-','').gsub('-ds.xml', '')
end
original_filename(file) click to toggle source
# File lib/foreman_openscap/bulk_upload.rb, line 56
def original_filename(file)
  file.split('/').last
end