foreman_openscap 0.7.1 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/api/v2/compliance/arf_reports_controller.rb +1 -1
  3. data/app/controllers/api/v2/compliance/policies_controller.rb +2 -2
  4. data/app/controllers/api/v2/compliance/scap_contents_controller.rb +1 -1
  5. data/app/controllers/api/v2/compliance/tailoring_files_controller.rb +1 -1
  6. data/app/controllers/arf_reports_controller.rb +9 -9
  7. data/app/controllers/concerns/foreman/controller/parameters/policy.rb +1 -1
  8. data/app/controllers/openscap_proxies_controller.rb +5 -5
  9. data/app/controllers/policies_controller.rb +16 -17
  10. data/app/controllers/policy_dashboard_controller.rb +2 -1
  11. data/app/controllers/scap_contents_controller.rb +2 -2
  12. data/app/controllers/tailoring_files_controller.rb +4 -4
  13. data/app/helpers/arf_report_dashboard_helper.rb +2 -3
  14. data/app/helpers/arf_reports_helper.rb +1 -1
  15. data/app/helpers/compliance_hosts_helper.rb +1 -2
  16. data/app/helpers/policies_helper.rb +4 -4
  17. data/app/helpers/policy_dashboard_helper.rb +2 -3
  18. data/app/lib/proxy_api/available_proxy.rb +2 -2
  19. data/app/lib/proxy_api/openscap.rb +1 -1
  20. data/app/mailers/foreman_openscap/policy_mailer.rb +1 -1
  21. data/app/models/concerns/foreman_openscap/compliance_status_scoped_search.rb +7 -8
  22. data/app/models/concerns/foreman_openscap/host_extensions.rb +44 -25
  23. data/app/models/concerns/foreman_openscap/log_extensions.rb +1 -1
  24. data/app/models/concerns/foreman_openscap/openscap_proxy_core_extensions.rb +3 -3
  25. data/app/models/foreman_openscap/arf_report.rb +34 -12
  26. data/app/models/foreman_openscap/policy.rb +19 -17
  27. data/app/models/foreman_openscap/scap_content.rb +4 -2
  28. data/app/services/foreman_openscap/arf_report_status_calculator.rb +1 -1
  29. data/app/services/foreman_openscap/host_report_dashboard/data.rb +2 -2
  30. data/app/services/foreman_openscap/policy_dashboard/data.rb +4 -3
  31. data/app/validators/foreman_openscap/data_stream_validator.rb +2 -2
  32. data/app/views/policy_dashboard/_policy_status_widget.html.erb +5 -5
  33. data/config/routes.rb +6 -6
  34. data/db/migrate/20141015115511_add_arf_report_unique_constraint.rb +1 -1
  35. data/db/migrate/20141113221054_create_scaptimony_scap_content_profiles.rb +1 -1
  36. data/db/migrate/20141116170632_remove_xccdf_profile_from_scaptimony_policies.rb +1 -1
  37. data/db/migrate/20141121120326_create_scaptimony_arf_report_breakdowns.rb +15 -15
  38. data/db/migrate/20141121164042_replace_arf_report_breakdown_view.rb +15 -15
  39. data/db/migrate/20141206211151_create_scaptimony_assets_policies.rb +1 -1
  40. data/db/migrate/20150115155947_add_scaptimony_scap_content_digest.rb +1 -1
  41. data/db/migrate/20150821100137_migrate_from_scaptimony.rb +1 -1
  42. data/db/migrate/20160830113437_remove_deleted_policy.rb +1 -1
  43. data/db/migrate/20160925213031_change_scap_widget_names.rb +8 -8
  44. data/db/migrate/20161223153249_add_permissions_to_arf_report.rb +4 -4
  45. data/db/seeds.d/75-job_templates.rb +6 -1
  46. data/db/seeds.d/openscap_feature.rb +1 -1
  47. data/lib/foreman_openscap/data_migration.rb +1 -2
  48. data/lib/foreman_openscap/engine.rb +33 -34
  49. data/lib/foreman_openscap/helper.rb +5 -7
  50. data/lib/foreman_openscap/message_cleaner.rb +32 -0
  51. data/lib/foreman_openscap/version.rb +1 -1
  52. data/lib/tasks/foreman_openscap_tasks.rake +12 -0
  53. data/locale/de/foreman_openscap.po +205 -43
  54. data/locale/en_GB/foreman_openscap.po +205 -43
  55. data/locale/es/foreman_openscap.po +205 -43
  56. data/locale/foreman_openscap.pot +418 -185
  57. data/locale/fr/foreman_openscap.po +205 -43
  58. data/locale/gl/foreman_openscap.po +205 -43
  59. data/locale/it/foreman_openscap.po +205 -43
  60. data/locale/ja/foreman_openscap.po +205 -43
  61. data/locale/ko/foreman_openscap.po +205 -43
  62. data/locale/pt_BR/foreman_openscap.po +205 -43
  63. data/locale/ru/foreman_openscap.po +205 -43
  64. data/locale/sv_SE/foreman_openscap.po +205 -43
  65. data/locale/zh_CN/foreman_openscap.po +205 -43
  66. data/locale/zh_TW/foreman_openscap.po +205 -43
  67. data/test/factories/arf_report_factory.rb +2 -2
  68. data/test/factories/asset_factory.rb +5 -0
  69. data/test/factories/compliance_host_factory.rb +4 -4
  70. data/test/factories/compliance_log_factory.rb +9 -4
  71. data/test/files/arf_report/arf_report.json +1 -0
  72. data/test/files/arf_report/arf_report_msg_desc_changed.json +1 -0
  73. data/test/files/arf_report/arf_report_msg_value_changed.json +1 -0
  74. data/test/functional/api/v2/compliance/arf_reports_controller_test.rb +111 -1
  75. data/test/functional/api/v2/compliance/policies_controller_test.rb +1 -1
  76. data/test/functional/api/v2/compliance/tailoring_files_controller_test.rb +4 -4
  77. data/test/test_plugin_helper.rb +4 -4
  78. data/test/unit/arf_report_test.rb +5 -5
  79. data/test/unit/concerns/host_extensions_test.rb +64 -4
  80. data/test/unit/message_cleaner_test.rb +31 -0
  81. data/test/unit/policy_mailer_test.rb +1 -2
  82. data/test/unit/scap_content_test.rb +3 -5
  83. data/test/unit/services/report_dashboard/data_test.rb +1 -1
  84. data/test/unit/services/tailoring_files_proxy_check_test.rb +4 -4
  85. metadata +12 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d990a16bea1dc5c0a6f4842fb3f61df880f744fb
4
- data.tar.gz: 1cc01508d9d31b40a171f809f4f6efa8ebd6485a
3
+ metadata.gz: 9ab167c73f11d1deec80d98b87c0c75a5c2df119
4
+ data.tar.gz: 2904ab063872e0ba90daca541917ebbde98d0927
5
5
  SHA512:
6
- metadata.gz: e33ad9f4607d3b235e0be752bf6a49594221a2ed8ac4e3c6a67f59b71df5712ad041c8e09ba4718d56301d4d9c21a2e9898c92168f1feb25e6180d630e11121a
7
- data.tar.gz: 2d58fcf86df24c30fdb767ad866a2e9ceb2b1e92a7ab8c97efcb793132f7a0371e2ffbce4d5ac1420665204abc1bc194702d4bb757338da4138669099a280a20
6
+ metadata.gz: ff2cdd7e0bedaabf6d5d5f76981afdf07019a8eee6faddd68b9ef88f349c4eef41b02994d04a4fd32894135dca037cedadcb24d5091a28407bdc3e2cc61f057d
7
+ data.tar.gz: 1661d0a384c8c66285cb2a4385aa47aeaccfdc4e4b8527a0eaca9cbb867fae5310e14b6d84f8dc1f687f7a55b37f30c0a861f6395bb309f7ade56960e3e9ba5b
@@ -19,7 +19,7 @@ module Api
19
19
  end
20
20
 
21
21
  def get_resource(message = 'no resource loaded')
22
- instance_variable_get :"@arf_report" or fail message
22
+ instance_variable_get :"@arf_report" or raise message
23
23
  end
24
24
 
25
25
  api :GET, '/compliance/arf_reports', N_('List ARF reports')
@@ -4,7 +4,7 @@ module Api::V2
4
4
  include Foreman::Controller::SmartProxyAuth
5
5
  include Foreman::Controller::Parameters::PolicyApi
6
6
 
7
- add_smart_proxy_filters [:content, :tailoring], :features => 'Openscap'
7
+ add_smart_proxy_filters %i(content tailoring), :features => 'Openscap'
8
8
 
9
9
  before_filter :find_resource, :except => %w(index create)
10
10
 
@@ -15,7 +15,7 @@ module Api::V2
15
15
  end
16
16
 
17
17
  def get_resource(message = 'no resource loaded')
18
- instance_variable_get :"@policy" or fail message
18
+ instance_variable_get :"@policy" or raise message
19
19
  end
20
20
 
21
21
  def policy_url(policy = nil)
@@ -9,7 +9,7 @@ module Api::V2
9
9
  end
10
10
 
11
11
  def get_resource(message = 'no resource loaded')
12
- instance_variable_get :"@scap_content" or fail message
12
+ instance_variable_get :"@scap_content" or raise message
13
13
  end
14
14
 
15
15
  api :GET, '/compliance/scap_contents', N_('List SCAP contents')
@@ -10,7 +10,7 @@ module Api::V2
10
10
  end
11
11
 
12
12
  def get_resource(message = 'no resource loaded')
13
- instance_variable_get :"@tailoring_file" or fail message
13
+ instance_variable_get :"@tailoring_file" or raise message
14
14
  end
15
15
 
16
16
  api :GET, '/compliance/tailoring_files', N_('List Tailoring files')
@@ -2,17 +2,17 @@ class ArfReportsController < ApplicationController
2
2
  include Foreman::Controller::AutoCompleteSearch
3
3
  include ForemanOpenscap::ArfReportsControllerCommonExtensions
4
4
 
5
- before_filter :find_arf_report, :only => [:show, :show_html, :destroy, :parse_html, :parse_bzip, :download_html]
6
- before_filter :find_multiple, :only => [:delete_multiple, :submit_delete_multiple]
5
+ before_filter :find_arf_report, :only => %i(show show_html destroy parse_html parse_bzip download_html)
6
+ before_filter :find_multiple, :only => %i(delete_multiple submit_delete_multiple)
7
7
 
8
8
  def model_of_controller
9
9
  ::ForemanOpenscap::ArfReport
10
10
  end
11
11
 
12
12
  def index
13
- @arf_reports = resource_base.includes(:host => [:policies, :last_report_object, :host_statuses])
14
- .search_for(params[:search], :order => params[:order])
15
- .paginate(:page => params[:page], :per_page => params[:per_page])
13
+ @arf_reports = resource_base.includes(:host => %i(policies last_report_object host_statuses))
14
+ .search_for(params[:search], :order => params[:order])
15
+ .paginate(:page => params[:page], :per_page => params[:per_page])
16
16
  end
17
17
 
18
18
  def show
@@ -34,7 +34,7 @@ class ArfReportsController < ApplicationController
34
34
  response = @arf_report.to_bzip
35
35
  send_data response, :filename => "#{format_filename}.xml.bz2", :type => 'application/octet-stream', :disposition => 'attachement'
36
36
  rescue => e
37
- process_error(:error_msg => (_("Failed to downloaded ARF report as bzip: %s") % (e.message)),
37
+ process_error(:error_msg => (_("Failed to downloaded ARF report as bzip: %s") % e.message),
38
38
  :error_redirect => arf_report_path(@arf_report.id))
39
39
  end
40
40
  end
@@ -52,7 +52,7 @@ class ArfReportsController < ApplicationController
52
52
 
53
53
  def destroy
54
54
  if @arf_report.destroy
55
- process_success(:success_msg => (_("Successfully deleted ARF report.")), :success_redirect => arf_reports_path)
55
+ process_success(:success_msg => _("Successfully deleted ARF report."), :success_redirect => arf_reports_path)
56
56
  else
57
57
  process_error(:error_msg => _("Failed to delete ARF Report for host %{host_name} reported at %{reported_at}") % {:host_name => @arf_report.host.name, :reported_at => @arf_report.reported_at})
58
58
  end
@@ -75,7 +75,7 @@ class ArfReportsController < ApplicationController
75
75
  private
76
76
 
77
77
  def find_arf_report
78
- @arf_report = resource_base.includes(:logs => [:message, :source]).find(params[:id])
78
+ @arf_report = resource_base.includes(:logs => %i(message source)).find(params[:id])
79
79
  end
80
80
 
81
81
  def find_multiple
@@ -91,7 +91,7 @@ class ArfReportsController < ApplicationController
91
91
  end
92
92
  return @arf_reports
93
93
  rescue => e
94
- error _("Something went wrong while selecting compliance reports - %s") % (e)
94
+ error _("Something went wrong while selecting compliance reports - %s") % e
95
95
  logger.debug e.message
96
96
  logger.debug e.backtrace.join("\n")
97
97
  redirect_to arf_reports_path and return false
@@ -5,7 +5,7 @@ module Foreman::Controller::Parameters::Policy
5
5
  class_methods do
6
6
  def policy_params_filter
7
7
  Foreman::ParameterFilter.new(::ForemanOpenscap::Policy).tap do |filter|
8
- filter.permit([:current_step, :wizard_initiated] + filter_params_list)
8
+ filter.permit(%i(current_step wizard_initiated) + filter_params_list)
9
9
  end
10
10
  end
11
11
  end
@@ -22,10 +22,10 @@ class OpenscapProxiesController < ApplicationController
22
22
  end
23
23
 
24
24
  def find_spool_error
25
- @smart_proxy.statuses[:logs].
26
- logs.
27
- log_entries.
28
- reverse.
29
- find { |entry| entry["level"] == "ERROR" && entry["message"].start_with?("Failed to parse Arf Report") }
25
+ @smart_proxy.statuses[:logs]
26
+ .logs
27
+ .log_entries
28
+ .reverse
29
+ .find { |entry| entry["level"] == "ERROR" && entry["message"].start_with?("Failed to parse Arf Report") }
30
30
  end
31
31
  end
@@ -2,8 +2,8 @@ class PoliciesController < ApplicationController
2
2
  include Foreman::Controller::AutoCompleteSearch
3
3
  include Foreman::Controller::Parameters::Policy
4
4
 
5
- before_filter :find_by_id, :only => [:show, :edit, :update, :parse, :destroy]
6
- before_filter :find_multiple, :only => [:select_multiple_hosts, :update_multiple_hosts, :disassociate_multiple_hosts, :remove_policy_from_multiple_hosts]
5
+ before_filter :find_by_id, :only => %i(show edit update parse destroy)
6
+ before_filter :find_multiple, :only => %i(select_multiple_hosts update_multiple_hosts disassociate_multiple_hosts remove_policy_from_multiple_hosts)
7
7
  before_filter :find_tailoring_file, :only => [:tailoring_file_selected]
8
8
 
9
9
  def model_of_controller
@@ -11,9 +11,9 @@ class PoliciesController < ApplicationController
11
11
  end
12
12
 
13
13
  def index
14
- @policies = resource_base.search_for(params[:search], :order => params[:order]).
15
- paginate(:page => params[:page], :per_page => params[:per_page]).
16
- includes(:scap_content, :scap_content_profile, :tailoring_file)
14
+ @policies = resource_base.search_for(params[:search], :order => params[:order])
15
+ .paginate(:page => params[:page], :per_page => params[:per_page])
16
+ .includes(:scap_content, :scap_content_profile, :tailoring_file)
17
17
  if @policies.empty? && ForemanOpenscap::ScapContent.unconfigured?
18
18
  redirect_to scap_contents_path
19
19
  end
@@ -34,13 +34,11 @@ class PoliciesController < ApplicationController
34
34
  @policy = ::ForemanOpenscap::Policy.new(policy_params)
35
35
  if @policy.wizard_completed? && @policy.save
36
36
  process_success :success_redirect => policies_path
37
+ elsif @policy.valid?
38
+ render 'new' and return
37
39
  else
38
- if @policy.valid?
39
- render 'new' and return
40
- else
41
- @policy.rewind_step
42
- process_error :object => @policy
43
- end
40
+ @policy.rewind_step
41
+ process_error :object => @policy
44
42
  end
45
43
  end
46
44
 
@@ -75,13 +73,14 @@ class PoliciesController < ApplicationController
75
73
  render :partial => 'tailoring_file_selected', :locals => { :policy => @policy, :tailoring_file => @tailoring_file }
76
74
  end
77
75
 
78
- def select_multiple_hosts; end
76
+ def select_multiple_hosts
77
+ end
79
78
 
80
79
  def update_multiple_hosts
81
80
  if (id = params['policy']['id'])
82
81
  policy = ::ForemanOpenscap::Policy.find(id)
83
82
  policy.assign_hosts(@hosts)
84
- notice _("Updated hosts: Assigned with compliance policy: %s") % policy.name
83
+ notice _("Updated hosts: Assigned with compliance policy: %s") % policy.name
85
84
  # We prefer to go back as this does not lose the current search
86
85
  redirect_to hosts_path
87
86
  else
@@ -90,18 +89,18 @@ class PoliciesController < ApplicationController
90
89
  end
91
90
  end
92
91
 
93
- def disassociate_multiple_hosts; end
92
+ def disassociate_multiple_hosts
93
+ end
94
94
 
95
95
  def remove_policy_from_multiple_hosts
96
96
  if (id = params.fetch(:policy, {})[:id])
97
97
  policy = ::ForemanOpenscap::Policy.find(id)
98
98
  policy.unassign_hosts(@hosts)
99
99
  notice _("Updated hosts: Unassigned from compliance policy '%s'") % policy.name
100
- redirect_to hosts_path
101
100
  else
102
101
  error _('No valid policy ID provided')
103
- redirect_to hosts_path
104
102
  end
103
+ redirect_to hosts_path
105
104
  end
106
105
 
107
106
  private
@@ -127,7 +126,7 @@ class PoliciesController < ApplicationController
127
126
  end
128
127
  return @hosts
129
128
  rescue => e
130
- error _("Something went wrong while selecting hosts - %s") % (e)
129
+ error _("Something went wrong while selecting hosts - %s") % e
131
130
  logger.debug e.message
132
131
  logger.debug e.backtrace.join("\n")
133
132
  redirect_to hosts_path and return false
@@ -1,7 +1,8 @@
1
1
  class PolicyDashboardController < ApplicationController
2
2
  before_filter :prefetch_data, :only => :index
3
3
 
4
- def index; end
4
+ def index
5
+ end
5
6
 
6
7
  def prefetch_data
7
8
  @policy = ::ForemanOpenscap::Policy.find(params[:id])
@@ -2,8 +2,8 @@ class ScapContentsController < ApplicationController
2
2
  include Foreman::Controller::AutoCompleteSearch
3
3
  include Foreman::Controller::Parameters::ScapContent
4
4
 
5
- before_filter :handle_file_upload, :only => [:create, :update]
6
- before_filter :find_by_id, :only => [:show, :edit, :update, :destroy]
5
+ before_filter :handle_file_upload, :only => %i(create update)
6
+ before_filter :find_by_id, :only => %i(show edit update destroy)
7
7
 
8
8
  def model_of_controller
9
9
  ::ForemanOpenscap::ScapContent
@@ -2,16 +2,16 @@ class TailoringFilesController < ApplicationController
2
2
  include Foreman::Controller::AutoCompleteSearch
3
3
  include Foreman::Controller::Parameters::TailoringFile
4
4
 
5
- before_filter :find_tailoring_file, :only => [:destroy, :update, :edit, :xml]
6
- before_filter :handle_file_upload, :only => [:create, :update]
5
+ before_filter :find_tailoring_file, :only => %i(destroy update edit xml)
6
+ before_filter :handle_file_upload, :only => %i(create update)
7
7
 
8
8
  def model_of_controller
9
9
  ::ForemanOpenscap::TailoringFile
10
10
  end
11
11
 
12
12
  def index
13
- @tailoring_files = resource_base.search_for(params[:search], :order => params[:order]).
14
- paginate(:page => params[:page], :per_page => params[:per_page])
13
+ @tailoring_files = resource_base.search_for(params[:search], :order => params[:order])
14
+ .paginate(:page => params[:page], :per_page => params[:per_page])
15
15
  end
16
16
 
17
17
  def new
@@ -3,14 +3,13 @@ module ArfReportDashboardHelper
3
3
  :passed => '#89A54E',
4
4
  :failed => '#AA4643',
5
5
  :othered => '#DB843D',
6
- }
6
+ }.freeze
7
7
 
8
8
  def reports_breakdown_chart(report, options = {})
9
9
  data = []
10
10
  [[:failed, _('Failed')],
11
11
  [:passed, _('Passed')],
12
- [:othered, _('Othered')],
13
- ].each do |i|
12
+ [:othered, _('Othered')],].each do |i|
14
13
  data << {:label => i[1], :data => report[i[0]], :color => COLORS[i[0]]}
15
14
  end
16
15
  flot_pie_chart 'overview', _('Compliance reports breakdown'), data, options
@@ -5,7 +5,7 @@ module ArfReportsHelper
5
5
  end
6
6
 
7
7
  def show_logs
8
- return unless @arf_report.logs.size > 0
8
+ return if @arf_report.logs.empty?
9
9
  form_tag arf_report_path(@arf_report), :id => 'level_filter', :method => :get, :class => "form form-horizontal" do
10
10
  content_tag(:span, _("Show log messages:") + ' ') +
11
11
  select(nil, 'level', [[_('All messages'), 'info'],[_('Failed and Othered'), 'warning'],[_('Failed only'), 'error']],
@@ -4,8 +4,7 @@ module ComplianceHostsHelper
4
4
  data = []
5
5
  [[:passed, _('Passed')],
6
6
  [:failed, _('Failed')],
7
- [:othered, _('Other')],
8
- ].each do |i|
7
+ [:othered, _('Other')],].each do |i|
9
8
  data << {:label => i[1], :data => report[i[0]], :color => ArfReportDashboardHelper::COLORS[i[0]]}
10
9
  end
11
10
  flot_pie_chart 'overview', _('Compliance reports breakdown'), data, options
@@ -1,7 +1,7 @@
1
1
  module PoliciesHelper
2
2
  def profiles_selection
3
- return @scap_content.scap_content_profiles unless @scap_content.blank?
4
- return @policy.scap_content.scap_content_profiles unless @policy.scap_content.blank?
3
+ return @scap_content.scap_content_profiles if @scap_content.present?
4
+ return @policy.scap_content.scap_content_profiles if @policy.scap_content.present?
5
5
  return []
6
6
  end
7
7
 
@@ -72,7 +72,7 @@ module PoliciesHelper
72
72
  content_tag(:div, :class => "form-actions") do
73
73
  text = overwrite ? overwrite : _("Submit")
74
74
  options = {:class => "btn btn-primary"}
75
- options.merge! :'data-id' => form_to_submit_id(form) unless options.key?(:'data-id')
75
+ options[:'data-id'] = form_to_submit_id(form) unless options.key?(:'data-id')
76
76
  previous = form.object.first_step? ? ' ' : previous_link(form)
77
77
  cancel_and_submit = content_tag(:div, :class => "pull-right") do
78
78
  link_to(_("Cancel"), args[:cancel_path], :class => "btn btn-default") + ' ' +
@@ -90,7 +90,7 @@ module PoliciesHelper
90
90
  def previous_link(form)
91
91
  previous = content_tag(:span, :class => 'glyphicon glyphicon-chevron-left') {}
92
92
  content_tag(:div, :class => 'pull-left') do
93
- link_to((previous).html_safe, '#', :class => 'btn btn-default', :onclick => "previous_step('#{@policy.previous_step}')")
93
+ link_to(previous.html_safe, '#', :class => 'btn btn-default', :onclick => "previous_step('#{@policy.previous_step}')")
94
94
  end
95
95
  end
96
96
 
@@ -4,15 +4,14 @@ module PolicyDashboardHelper
4
4
  :incompliant_hosts => ArfReportDashboardHelper::COLORS[:failed],
5
5
  :inconclusive_hosts => ArfReportDashboardHelper::COLORS[:othered],
6
6
  :report_missing => '#92A8CD',
7
- }
7
+ }.freeze
8
8
 
9
9
  def host_breakdown_chart(report, options = {})
10
10
  data = []
11
11
  [[:compliant_hosts, _('Compliant hosts')],
12
12
  [:incompliant_hosts, _('Incompliant hosts')],
13
13
  [:inconclusive_hosts, _('Inconclusive')],
14
- [:report_missing, _('Not audited')],
15
- ].each do |i|
14
+ [:report_missing, _('Not audited')],].each do |i|
16
15
  data << {:label => i[1], :data => report[i[0]], :color => COLORS[i[0]]}
17
16
  end
18
17
  flot_pie_chart 'overview', _('Compliance Status'), data, options
@@ -9,7 +9,7 @@ module ::ProxyAPI
9
9
  Net::HTTPHeaderSyntaxError,
10
10
  Net::ProtocolError,
11
11
  Timeout::Error
12
- ]
12
+ ].freeze
13
13
 
14
14
  def initialize(args)
15
15
  @args = args
@@ -17,7 +17,7 @@ module ::ProxyAPI
17
17
 
18
18
  def available?
19
19
  begin
20
- return true if (has_scap_feature? && minimum_version)
20
+ return true if has_scap_feature? && minimum_version
21
21
  rescue *HTTP_ERRORS
22
22
  return false
23
23
  end
@@ -3,7 +3,7 @@ module ::ProxyAPI
3
3
  def initialize(args)
4
4
  @url = args[:url] + '/compliance/'
5
5
  super args
6
- @connect_params[:headers].merge!(:content_type => :xml)
6
+ @connect_params[:headers][:content_type] = :xml
7
7
  @connect_params[:timeout] = timeout
8
8
  end
9
9
 
@@ -32,7 +32,7 @@ module ForemanOpenscap
32
32
  @changed_hosts = []
33
33
  hash.each do |key, values|
34
34
  values.each do |host|
35
- @changed_hosts << host if host.scap_status_changed?(::ForemanOpenscap::Policy.find key)
35
+ @changed_hosts << host if host.scap_status_changed?(::ForemanOpenscap::Policy.find(key))
36
36
  end
37
37
  end
38
38
  @changed_hosts.uniq
@@ -4,7 +4,8 @@ module ForemanOpenscap
4
4
 
5
5
  module ClassMethods
6
6
  def compliance_status_scoped_search(status, options = {})
7
- options.merge!(:offset => ArfReport::METRIC.index(status.to_s), :word_size => ArfReport::BIT_NUM)
7
+ options[:offset] = ArfReport::METRIC.index(status.to_s)
8
+ options[:word_size] = ArfReport::BIT_NUM
8
9
  scoped_search options
9
10
  end
10
11
 
@@ -12,9 +13,8 @@ module ForemanOpenscap
12
13
  cond = sanitize_policy_name(policy_name)
13
14
  { :conditions => ArfReport.arel_table[:id].in(
14
15
  PolicyArfReport.select(PolicyArfReport.arel_table[:arf_report_id])
15
- .of_policy(Policy.find_by_name(cond).id).ast
16
- ).to_sql
17
- }
16
+ .of_policy(Policy.find_by(name: cond).id).ast
17
+ ).to_sql}
18
18
  end
19
19
 
20
20
  def search_by_comply_with(_key, _operator, policy_name)
@@ -33,9 +33,8 @@ module ForemanOpenscap
33
33
  cond = sanitize_policy_name(policy_name)
34
34
  { :conditions => ArfReport.arel_table[:id].in(
35
35
  ArfReport.select(ArfReport.arel_table[:id])
36
- .latest_of_policy(Policy.find_by_name cond).instance_eval(&selection).ast
37
- ).to_sql
38
- }
36
+ .latest_of_policy(Policy.find_by(name: cond)).instance_eval(&selection).ast
37
+ ).to_sql}
39
38
  end
40
39
 
41
40
  def search_by_last_for(key, operator, by)
@@ -56,7 +55,7 @@ module ForemanOpenscap
56
55
  ) latest
57
56
  ON foreman_openscap_policies.id = latest.policy_id)' }
58
57
  else
59
- fail "Cannot search last by #{by}"
58
+ raise "Cannot search last by #{by}"
60
59
  end
61
60
  end
62
61
 
@@ -23,27 +23,23 @@ module ForemanOpenscap
23
23
  after_update :puppetrun!, :if => ->(host) { Setting[:puppetrun] && host.changed.include?('openscap_proxy_id') }
24
24
 
25
25
  scope :comply_with, lambda { |policy|
26
- joins(:arf_reports).merge(ArfReport.latest_of_policy policy).merge(ArfReport.passed)
26
+ joins(:arf_reports).merge(ArfReport.latest_of_policy(policy)).merge(ArfReport.passed)
27
27
  }
28
28
 
29
29
  scope :incomply_with, lambda { |policy|
30
- joins(:arf_reports).merge(ArfReport.latest_of_policy policy).merge(ArfReport.failed)
30
+ joins(:arf_reports).merge(ArfReport.latest_of_policy(policy)).merge(ArfReport.failed)
31
31
  }
32
32
 
33
33
  scope :inconclusive_with, lambda { |policy|
34
- joins(:arf_reports).merge(ArfReport.latest_of_policy policy).merge(ArfReport.othered)
34
+ joins(:arf_reports).merge(ArfReport.latest_of_policy(policy)).merge(ArfReport.othered)
35
35
  }
36
36
 
37
37
  scope :policy_reports_missing, lambda { |policy|
38
- where("id NOT IN (SELECT host_id
39
- FROM reports INNER JOIN foreman_openscap_policy_arf_reports
40
- ON reports.id = foreman_openscap_policy_arf_reports.arf_report_id
41
- WHERE policy_id = #{policy.id})
42
- AND id IN (SELECT assetable_id
43
- FROM foreman_openscap_asset_policies INNER JOIN foreman_openscap_assets
44
- ON foreman_openscap_asset_policies.asset_id = foreman_openscap_assets.id
45
- WHERE foreman_openscap_assets.assetable_type = 'Host::Base'
46
- AND foreman_openscap_asset_policies.policy_id = '#{policy.id}')")
38
+ search_for("compliance_report_missing_for = \"#{policy.name}\"")
39
+ }
40
+
41
+ scope :assigned_to_policy, lambda { |policy|
42
+ search_for("compliance_policy = \"#{policy.name}\"")
47
43
  }
48
44
 
49
45
  alias_method_chain :inherited_attributes, :openscap
@@ -86,10 +82,10 @@ module ForemanOpenscap
86
82
  def reports_for_policy(policy, limit = nil)
87
83
  if limit
88
84
  ForemanOpenscap::ArfReport.joins(:policy_arf_report)
89
- .merge(ForemanOpenscap::PolicyArfReport.of_policy policy.id).where(:host_id => id).limit limit
85
+ .merge(ForemanOpenscap::PolicyArfReport.of_policy(policy.id)).where(:host_id => id).limit limit
90
86
  else
91
87
  ForemanOpenscap::ArfReport.joins(:policy_arf_report)
92
- .merge(ForemanOpenscap::PolicyArfReport.of_policy policy.id).where(:host_id => id)
88
+ .merge(ForemanOpenscap::PolicyArfReport.of_policy(policy.id)).where(:host_id => id)
93
89
  end
94
90
  end
95
91
 
@@ -104,21 +100,44 @@ module ForemanOpenscap
104
100
  module ClassMethods
105
101
  def search_by_policy_name(key, operator, policy_name)
106
102
  cond = sanitize_sql_for_conditions(["foreman_openscap_policies.name #{operator} ?", value_to_sql(operator, policy_name)])
107
- { :conditions => Host::Managed.arel_table[:id].in(Host::Managed.select(Host::Managed.arel_table[:id]).joins(:policies).where(cond).pluck(:id)).to_sql }
103
+
104
+ host_group_host_ids = policy_assigned_using_hostgroup_host_ids cond, []
105
+ host_group_cond = if host_group_host_ids.any?
106
+ ' OR ' + sanitize_sql_for_conditions("hosts.id IN (#{host_group_host_ids.join(',')})")
107
+ else
108
+ ''
109
+ end
110
+ { :conditions => Host::Managed.arel_table[:id].in(Host::Managed.select(Host::Managed.arel_table[:id]).joins(:policies).where(cond).pluck(:id)).to_sql + host_group_cond }
108
111
  end
109
112
 
110
113
  def search_by_missing_arf(key, operator, policy_name)
111
114
  cond = sanitize_sql_for_conditions(["foreman_openscap_policies.name #{operator} ?", value_to_sql(operator, policy_name)])
112
- { :conditions => Host::Managed.arel_table[:id].in(Host::Managed.select(Host::Managed.arel_table[:id]).
113
- joins(:policies).
114
- where(cond).
115
- where("foreman_openscap_assets.id NOT IN (
116
- SELECT DISTINCT foreman_openscap_arf_reports.asset_id
117
- FROM foreman_openscap_arf_reports
118
- WHERE foreman_openscap_arf_reports.asset_id = foreman_openscap_assets.id
119
- AND foreman_openscap_arf_reports.policy_id = foreman_openscap_policies.id)").
120
- pluck(:id)).to_sql
121
- }
115
+
116
+ host_ids_from_arf_of_policy = ForemanOpenscap::ArfReport.joins(:policy).where(cond).pluck(:host_id).uniq
117
+
118
+ direct_result = policy_assigned_directly_host_ids cond, host_ids_from_arf_of_policy
119
+
120
+ hg_result = policy_assigned_using_hostgroup_host_ids cond, host_ids_from_arf_of_policy
121
+
122
+ result = (direct_result + hg_result).uniq
123
+ { :conditions => "hosts.id IN (#{result.empty? ? 'NULL' : result.join(',')})" }
124
+ end
125
+
126
+ def policy_assigned_directly_host_ids(condition, host_ids_from_arf)
127
+ ForemanOpenscap::Asset.where(:assetable_type => 'Host::Base')
128
+ .joins(:policies)
129
+ .where(condition)
130
+ .where.not(:assetable_id => host_ids_from_arf)
131
+ .pluck(:assetable_id)
132
+ end
133
+
134
+ def policy_assigned_using_hostgroup_host_ids(condition, host_ids_from_arf)
135
+ hostgroup_with_policy_ids = ForemanOpenscap::Asset.where(:assetable_type => 'Hostgroup')
136
+ .joins(:policies)
137
+ .where(condition)
138
+ .pluck(:assetable_id)
139
+ subtree_ids = Hostgroup.where(:id => hostgroup_with_policy_ids).flat_map(&:subtree_ids).uniq
140
+ Host.where(:hostgroup_id => subtree_ids).where.not(:id => host_ids_from_arf).pluck(:id)
122
141
  end
123
142
  end
124
143
  end
@@ -2,7 +2,7 @@ module ForemanOpenscap
2
2
  module LogExtensions
3
3
  extend ActiveSupport::Concern
4
4
  included do
5
- SCAP_RESULT = %w(pass fail error unknown notapplicable notchecked notselected informational fixed)
5
+ SCAP_RESULT = %w(pass fail error unknown notapplicable notchecked notselected informational fixed).freeze
6
6
  validate :scap_result
7
7
  end
8
8
 
@@ -13,7 +13,7 @@ module ForemanOpenscap
13
13
  end
14
14
 
15
15
  def update_scap_client_params
16
- model_match = self.class.name.underscore.match(/\Ahostgroup\z/) ? "hostgroup" : "fqdn"
16
+ model_match = self.class.name.underscore =~ /\Ahostgroup\z/ ? "hostgroup" : "fqdn"
17
17
  scap_params = find_scap_client.class_params
18
18
  server_lookup_key = scap_params.find { |param| param.key == "server" }
19
19
  port_lookup_key = scap_params.find { |param| param.key == "port" }
@@ -34,7 +34,7 @@ module ForemanOpenscap
34
34
 
35
35
  def scap_client_lookup_values_for(lookup_keys, model_match)
36
36
  lookup_keys.inject({}) do |result, key|
37
- result[key] = key.lookup_values.find { |value| value.match == "#{lookup_matcher(model_match)}" }
37
+ result[key] = key.lookup_values.find { |value| value.match == lookup_matcher(model_match).to_s }
38
38
  result
39
39
  end
40
40
  end
@@ -55,7 +55,7 @@ module ForemanOpenscap
55
55
  end
56
56
 
57
57
  def find_scap_client
58
- Puppetclass.find_by_name("foreman_scap_client")
58
+ Puppetclass.find_by(name: "foreman_scap_client")
59
59
  end
60
60
 
61
61
  def lookup_matcher(model_match)