class InspecTools::PDF

Public Class Methods

new(pdf, profile_name, debug = false) click to toggle source
# File lib/inspec_tools/pdf.rb, line 11
def initialize(pdf, profile_name, debug = false)
  raise ArgumentError if pdf.nil?

  @pdf = pdf
  @name = profile_name
  @debug = debug
end

Public Instance Methods

to_ckl() click to toggle source
# File lib/inspec_tools/pdf.rb, line 46
def to_ckl
  # TODO: to_ckl
end
to_csv() click to toggle source
# File lib/inspec_tools/pdf.rb, line 38
def to_csv
  # TODO: to_csv
end
to_inspec() click to toggle source
# File lib/inspec_tools/pdf.rb, line 19
def to_inspec
  @controls = []
  @csv_handle = nil
  @cci_xml = nil
  @nist_mapping = Utils::CisToNist.get_mapping('cis_to_nist_critical_controls')
  @pdf_text = ''
  @clean_text = ''
  @transformed_data = ''
  @profile = {}
  read_pdf
  @title ||= extract_title
  clean_pdf_text
  transform_data
  insert_json_metadata
  @profile['controls'] = parse_controls
  @profile['sha256'] = Digest::SHA256.hexdigest @profile.to_s
  @profile
end
to_xccdf() click to toggle source
# File lib/inspec_tools/pdf.rb, line 42
def to_xccdf
  # TODO: to_xccdf
end

Private Instance Methods

clean_pdf_text() click to toggle source
# File lib/inspec_tools/pdf.rb, line 104
def clean_pdf_text
  @clean_text = Util::TextCleaner.new.clean_data(@pdf_text)
  write_clean_text if @debug
end
extract_title() click to toggle source
# File lib/inspec_tools/pdf.rb, line 95
def extract_title
  @pdf_text.match(/([^\n]*)\n/).captures[0]
end
insert_json_metadata() click to toggle source
# File lib/inspec_tools/pdf.rb, line 78
def insert_json_metadata
  @profile['name'] = @name
  @profile['title'] = @title
  @profile['maintainer'] = 'The Authors'
  @profile['copyright'] = 'The Authors'
  @profile['copyright_email'] = 'you@example.com'
  @profile['license'] = 'Apache-2.0'
  @profile['summary'] = 'An InSpec Compliance Profile'
  @profile['version'] = '0.1.0'
  @profile['supports'] = []
  @profile['attributes'] = []
  @profile['generator'] = {
    name: 'inspec_tools',
    version: VERSION
  }
end
parse_controls() click to toggle source

converts passed in data into InSpec format

# File lib/inspec_tools/pdf.rb, line 53
def parse_controls
  controls = []
  @transformed_data.each do |contr|
    nist = find_nist(contr[:cis]) unless contr[:cis] == 'No CIS Control'
    control = {}
    control['id'] = "M-#{contr[:title].split[0]}"
    control['title'] = contr[:title]
    control['desc'] = contr[:descr]
    control['impact'] = Utils::InspecUtil.get_impact('medium')
    control['tags'] = {}
    control['tags']['severity'] = Utils::InspecUtil.get_impact_string(control['impact'])
    control['tags']['ref'] = contr[:ref] unless contr[:ref].nil?
    control['tags']['applicability'] = contr[:applicability] unless contr[:applicability].nil?
    control['tags']['cis_id'] = contr[:title].split[0] unless contr[:title].nil?
    control['tags']['cis_control'] = [contr[:cis], @nist_mapping[0][:cis_ver]] unless contr[:cis].nil? # tag cis_control: [5, 6.1] ##6.1 is the version
    control['tags']['cis_level'] = contr[:level] unless contr[:level].nil?
    control['tags']['nist'] = nist unless nist.nil? # tag nist: [AC-3, 4]  ##4 is the version
    control['tags']['check'] = contr[:check] unless contr[:check].nil?
    control['tags']['fix'] = contr[:fix] unless contr[:fix].nil?
    control['tags']['Default Value'] = contr[:default] unless contr[:default].nil?
    controls << control
  end
  controls
end
read_pdf() click to toggle source
# File lib/inspec_tools/pdf.rb, line 99
def read_pdf
  @pdf_text = Util::ExtractPdfText.new(@pdf).extracted_text
  write_pdf_text if @debug
end
transform_data() click to toggle source
# File lib/inspec_tools/pdf.rb, line 109
def transform_data
  @transformed_data = Util::PrepareData.new(@clean_text).transformed_data
end
write_clean_text() click to toggle source
# File lib/inspec_tools/pdf.rb, line 117
def write_clean_text
  File.write('debug_text', @clean_text)
end
write_pdf_text() click to toggle source
# File lib/inspec_tools/pdf.rb, line 113
def write_pdf_text
  File.write('pdf_text', @pdf_text)
end