class HeimdallTools::SonarQubeMapper
Public Class Methods
new(project_name, sonarqube_url, auth = nil)
click to toggle source
Fetches the necessary data from the API and builds report
# File lib/heimdall_tools/sonarqube_mapper.rb, line 114 def initialize(project_name, sonarqube_url, auth = nil) @project_name = project_name @api = SonarQubeApi.new(sonarqube_url, auth) @mappings = load_nist_mappings @findings = @api.query_issues(@project_name).map { |x| Finding.new(x, @api) } @controls = _get_controls end
Public Instance Methods
_get_controls()
click to toggle source
Build an array of Controls based on the SonarQube findings
# File lib/heimdall_tools/sonarqube_mapper.rb, line 124 def _get_controls control_key_to_findings_map = Hash.new { |h, k| h[k] = [] } @findings.each { |f| control_key_to_findings_map[f.control_key] << f } control_key_to_findings_map.map { |control_key, findings| Control.new(control_key, findings, @api, @mappings) } end
load_nist_mappings()
click to toggle source
# File lib/heimdall_tools/sonarqube_mapper.rb, line 130 def load_nist_mappings mappings = {} MAPPING_FILES.each do |mapping_type, path| csv_data = CSV.read(path, { encoding: 'UTF-8', headers: true, header_converters: :symbol, converters: :all }) mappings[mapping_type] = csv_data.reject { |row| row[:nistid].nil? }.map { |row| [row["#{mapping_type.to_s.downcase}id".to_sym].to_s, [row[:nistid], "Rev_#{row[:rev]}"]] }.to_h end mappings end
to_hdf()
click to toggle source
Returns a report in HDF format
# File lib/heimdall_tools/sonarqube_mapper.rb, line 145 def to_hdf results = HeimdallDataFormat.new(profile_name: 'SonarQube Scan', version: @api.query_version, title: "SonarQube Scan of Project: #{@project_name}", summary: "SonarQube Scan of Project: #{@project_name}", controls: @controls.map(&:hdf)) results.to_hdf end