Sha256: 616dec4fddbdac2b26bd83e8af209abede1ee5b0a0e2662768f3aa5b2c89fff5

Contents?: true

Size: 1.32 KB

Versions: 5

Compression:

Stored size: 1.32 KB

Contents

require 'openscap/ds/sds'
require 'openscap/source'
require 'openscap/xccdf/benchmark'

module Proxy::OpenSCAP
  class ContentParser
    def initialize(scap_content)
      OpenSCAP.oscap_init
      @source = OpenSCAP::Source.new(:content => scap_content)
    end

    def extract_policies
      policies = {}
      bench = benchmark_profiles
      bench.profiles.each do |key, profile|
        policies[key] = profile.title
      end
      bench.destroy
      policies.to_json
    end

    def validate
      errors = []
      allowed_type = 'SCAP Source Datastream'
      if @source.type != allowed_type
        errors << "Uploaded file is not #{allowed_type}"
      end

      begin
        @source.validate!
      rescue OpenSCAP::OpenSCAPError
        errors << "Invalid SCAP file type"
      end
      {:errors => errors}.to_json
    end

    def guide(policy)
      sds = OpenSCAP::DS::Sds.new @source
      sds.select_checklist
      profile_id = policy ? nil : policy
      html = sds.html_guide profile_id
      sds.destroy
      {:html => html.force_encoding('UTF-8')}.to_json
    end

    private

    def benchmark_profiles
      sds          = ::OpenSCAP::DS::Sds.new(@source)
      bench_source = sds.select_checklist!
      benchmark = ::OpenSCAP::Xccdf::Benchmark.new(bench_source)
      sds.destroy
      benchmark
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
smart_proxy_openscap-0.6.0 lib/smart_proxy_openscap/openscap_content_parser.rb
smart_proxy_openscap-0.5.4 lib/smart_proxy_openscap/openscap_content_parser.rb
smart_proxy_openscap-0.5.3 lib/smart_proxy_openscap/openscap_content_parser.rb
smart_proxy_openscap-0.5.1 lib/smart_proxy_openscap/openscap_content_parser.rb
smart_proxy_openscap-0.5.0 lib/smart_proxy_openscap/openscap_content_parser.rb