foreman_openscap 0.8.3 → 0.8.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/api/v2/compliance/arf_reports_controller.rb +15 -6
  3. data/app/controllers/api/v2/compliance/policies_controller.rb +4 -2
  4. data/app/controllers/api/v2/compliance/scap_contents_controller.rb +3 -2
  5. data/app/controllers/api/v2/compliance/tailoring_files_controller.rb +3 -2
  6. data/app/controllers/arf_reports_controller.rb +4 -4
  7. data/app/controllers/policies_controller.rb +6 -5
  8. data/app/controllers/scap_contents_controller.rb +3 -3
  9. data/app/helpers/arf_report_dashboard_helper.rb +1 -1
  10. data/app/helpers/arf_reports_helper.rb +8 -8
  11. data/app/helpers/compliance_dashboard_helper.rb +0 -2
  12. data/app/helpers/compliance_hosts_helper.rb +7 -8
  13. data/app/helpers/policies_helper.rb +18 -18
  14. data/app/helpers/policy_dashboard_helper.rb +3 -3
  15. data/app/lib/proxy_api/available_proxy.rb +2 -2
  16. data/app/lib/proxy_api/openscap.rb +1 -1
  17. data/app/mailers/foreman_openscap/policy_mailer.rb +0 -2
  18. data/app/models/concerns/foreman_openscap/compliance_status_scoped_search.rb +7 -7
  19. data/app/models/concerns/foreman_openscap/data_stream_content.rb +1 -1
  20. data/app/models/concerns/foreman_openscap/host_extensions.rb +16 -6
  21. data/app/models/concerns/foreman_openscap/openscap_proxy_extensions.rb +1 -1
  22. data/app/models/foreman_openscap/arf_report.rb +5 -5
  23. data/app/models/foreman_openscap/policy.rb +6 -6
  24. data/app/models/foreman_openscap/scap_content.rb +2 -2
  25. data/app/models/foreman_openscap/tailoring_file.rb +1 -1
  26. data/app/services/foreman_openscap/arf_report_status_calculator.rb +0 -1
  27. data/app/services/foreman_openscap/host_report_dashboard/data.rb +2 -3
  28. data/app/services/foreman_openscap/openscap_proxy_version_check.rb +0 -1
  29. data/app/services/foreman_openscap/policy_dashboard/data.rb +7 -6
  30. data/app/services/foreman_openscap/report_dashboard/data.rb +1 -0
  31. data/app/views/api/v2/compliance/common/_loc.json.rabl +1 -1
  32. data/app/views/api/v2/compliance/common/_org.json.rabl +1 -1
  33. data/app/views/api/v2/compliance/policies/base.json.rabl +1 -1
  34. data/app/views/arf_reports/_list.html.erb +1 -1
  35. data/app/views/arf_reports/delete_multiple.html.erb +1 -1
  36. data/app/views/arf_reports/welcome.html.erb +12 -0
  37. data/app/views/compliance_hosts/show.html.erb +3 -1
  38. data/app/views/policy_dashboard/_policy_reports.html.erb +1 -1
  39. data/app/views/scap_contents/_list.html.erb +1 -1
  40. data/app/views/smart_proxies/_openscap_spool.html.erb +1 -1
  41. data/app/views/tailoring_files/_list.html.erb +1 -1
  42. data/config/routes.rb +9 -11
  43. data/db/migrate/20141015115511_add_arf_report_unique_constraint.rb +1 -1
  44. data/db/migrate/20141113221054_create_scaptimony_scap_content_profiles.rb +2 -3
  45. data/db/migrate/20141206211151_create_scaptimony_assets_policies.rb +1 -1
  46. data/db/migrate/20150115155947_add_scaptimony_scap_content_digest.rb +1 -1
  47. data/db/migrate/20150821100137_migrate_from_scaptimony.rb +1 -1
  48. data/db/migrate/20150929152345_move_arf_reports_to_reports_table.rb +0 -1
  49. data/db/migrate/20161223153249_add_permissions_to_arf_report.rb +2 -2
  50. data/db/migrate/20171016125613_add_content_title_unique_constraint.foreman_openscap.rb +6 -0
  51. data/lib/foreman_openscap/bulk_upload.rb +1 -1
  52. data/lib/foreman_openscap/engine.rb +54 -56
  53. data/lib/foreman_openscap/version.rb +1 -1
  54. data/lib/tasks/foreman_openscap_tasks.rake +11 -2
  55. data/locale/de/foreman_openscap.po +52 -13
  56. data/locale/en_GB/foreman_openscap.po +52 -13
  57. data/locale/es/foreman_openscap.po +52 -13
  58. data/locale/foreman_openscap.pot +140 -90
  59. data/locale/fr/foreman_openscap.po +52 -13
  60. data/locale/gl/foreman_openscap.po +52 -13
  61. data/locale/it/foreman_openscap.po +52 -13
  62. data/locale/ja/foreman_openscap.po +52 -13
  63. data/locale/ko/foreman_openscap.po +52 -13
  64. data/locale/pt_BR/foreman_openscap.po +52 -13
  65. data/locale/ru/foreman_openscap.po +52 -13
  66. data/locale/sv_SE/foreman_openscap.po +52 -13
  67. data/locale/zh_CN/foreman_openscap.po +52 -13
  68. data/locale/zh_TW/foreman_openscap.po +52 -13
  69. data/test/factories/arf_report_factory.rb +1 -1
  70. data/test/factories/asset_factory.rb +2 -2
  71. data/test/factories/compliance_host_factory.rb +2 -2
  72. data/test/factories/compliance_log_factory.rb +1 -1
  73. data/test/factories/policy_arf_report_factory.rb +1 -1
  74. data/test/factories/policy_factory.rb +3 -3
  75. data/test/factories/scap_content_related.rb +2 -2
  76. data/test/functional/api/v2/compliance/arf_reports_controller_test.rb +28 -9
  77. data/test/functional/api/v2/compliance/policies_controller_test.rb +16 -16
  78. data/test/functional/api/v2/compliance/scap_contents_controller_test.rb +8 -9
  79. data/test/functional/api/v2/compliance/tailoring_files_controller_test.rb +10 -11
  80. data/test/functional/arf_reports_controller_test.rb +4 -4
  81. data/test/functional/openscap_proxies_controller_test.rb +5 -3
  82. data/test/functional/tailoring_files_controller_test.rb +1 -1
  83. data/test/test_plugin_helper.rb +7 -7
  84. data/test/unit/arf_report_status_calculator_test.rb +0 -1
  85. data/test/unit/arf_report_test.rb +50 -50
  86. data/test/unit/compliance_status_test.rb +13 -13
  87. data/test/unit/concerns/host_extensions_test.rb +38 -22
  88. data/test/unit/concerns/openscap_proxy_extenstions_test.rb +5 -6
  89. data/test/unit/message_cleaner_test.rb +7 -7
  90. data/test/unit/openscap_host_test.rb +13 -13
  91. data/test/unit/policy_mailer_test.rb +12 -12
  92. data/test/unit/policy_test.rb +30 -30
  93. data/test/unit/scap_content_test.rb +4 -4
  94. data/test/unit/services/report_dashboard/data_test.rb +6 -6
  95. data/test/unit/services/tailoring_files_proxy_check_test.rb +1 -1
  96. metadata +4 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4da93ad56f1a41635d2c5dbefbfb60d0dccb09ef
4
- data.tar.gz: 61b13cee3f7671c56dc006ec365ff63c5a64eef3
3
+ metadata.gz: 3c549bddac8d76de26371740d282a226a08300f5
4
+ data.tar.gz: efb9f59e37b0b2bb7351f2ccd62e3dc3dab41aea
5
5
  SHA512:
6
- metadata.gz: 71f5244439f5aca602a9440c6c4a9b1a95afcb946ba1a279fcd2386c0834ae08e85fc9a94bc74c6c6fb08b4e056ff2d099db0c32621a94d8805f51f63fc5ce00
7
- data.tar.gz: 9264fedc8b169a4678e750456ef019374a8df3ec4d7639cd16217a3bcad510e5fd2a31549c38e6af76c7f989837302fadc94f4b4e3cb3467f272b27dce41a6da
6
+ metadata.gz: 07c6aa94f281c2a5617e92667fcb4dd85f4b2fce25ca8bd1fe7a1ed87facb618b75f019a8e9f82d2b8be61010ddf08ad69b4230d019ff90407bc745522e81f50
7
+ data.tar.gz: 4ff5e641877263dcd2792106893610c7183bb6d15d2b65772600722790475cd4b4d1b1480c5ba741f889310c329605eb8032ebc1e1136fb107a88419b0c3d9e2
@@ -3,7 +3,6 @@ require 'foreman_openscap/helper'
3
3
  module Api
4
4
  module V2
5
5
  module Compliance
6
-
7
6
  class ArfReportsController < V2::BaseController
8
7
  include Api::Version2
9
8
  include Foreman::Controller::SmartProxyAuth
@@ -19,7 +18,7 @@ module Api
19
18
  end
20
19
 
21
20
  def get_resource(message = 'no resource loaded')
22
- instance_variable_get :"@arf_report" or raise message
21
+ instance_variable_get(:"@arf_report") || raise(message)
23
22
  end
24
23
 
25
24
  api :GET, '/compliance/arf_reports', N_('List ARF reports')
@@ -49,9 +48,13 @@ module Api
49
48
 
50
49
  def create
51
50
  asset = ForemanOpenscap::Helper::get_asset(params[:cname], params[:policy_id])
52
- arf_report = ForemanOpenscap::ArfReport.create_arf(asset, params)
53
- asset.host.refresh_statuses if asset.host
54
- render :json => { :result => :OK, :id => arf_report.id.to_s }
51
+ if asset.host.openscap_proxy
52
+ arf_report = ForemanOpenscap::ArfReport.create_arf(asset, params)
53
+ asset.host.refresh_statuses([HostStatus.find_status_by_humanized_name("compliance")])
54
+ render :json => { :result => :OK, :id => arf_report.id.to_s }
55
+ else
56
+ no_proxy_for_host asset
57
+ end
55
58
  end
56
59
 
57
60
  api :GET, "/compliance/arf_reports/:id/download/", N_("Download bzipped ARF report")
@@ -77,7 +80,7 @@ module Api
77
80
  private
78
81
 
79
82
  def find_resource
80
- not_found and return if params[:id].blank?
83
+ not_found && return if params[:id].blank?
81
84
  instance_variable_set("@arf_report", resource_scope.find(params[:id]))
82
85
  end
83
86
 
@@ -85,6 +88,12 @@ module Api
85
88
  render_error 'standard_error', :status => :internal_error, :locals => { :exception => error }
86
89
  end
87
90
 
91
+ def no_proxy_for_host(asset)
92
+ msg = _('Failed to upload Arf Report, no OpenSCAP proxy set for host %s') % asset.host.name
93
+ logger.error msg
94
+ render :json => { :result => msg }, :status => :unprocessable_entity
95
+ end
96
+
88
97
  def action_permission
89
98
  case params[:action]
90
99
  when 'download', 'download_html'
@@ -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 raise message
18
+ instance_variable_get(:"@policy") || raise(message)
19
19
  end
20
20
 
21
21
  def policy_url(policy = nil)
@@ -46,6 +46,7 @@ module Api::V2
46
46
  param :day_of_month, Integer, :desc => N_('Policy schedule day of month (only if period == "monthly")')
47
47
  param :cron_line, String, :desc => N_('Policy schedule cron line (only if period == "custom")')
48
48
  param :hostgroup_ids, Array, :desc => N_('Apply policy to host groups')
49
+ param :host_ids, Array, :desc => N_('Apply policy to hosts')
49
50
  param :tailoring_file_id, Integer, :desc => N_('Tailoring file ID')
50
51
  param :tailoring_file_profile_id, Integer, :desc => N_('Tailoring file profile ID')
51
52
  param_group :taxonomies, ::Api::V2::BaseController
@@ -100,8 +101,9 @@ module Api::V2
100
101
  end
101
102
 
102
103
  private
104
+
103
105
  def find_resource
104
- not_found and return if params[:id].blank?
106
+ not_found && return if params[:id].blank?
105
107
  instance_variable_set("@policy", resource_scope.find(params[:id]))
106
108
  end
107
109
 
@@ -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 raise message
12
+ instance_variable_get(:"@scap_content") || raise(message)
13
13
  end
14
14
 
15
15
  api :GET, '/compliance/scap_contents', N_('List SCAP contents')
@@ -66,8 +66,9 @@ module Api::V2
66
66
  end
67
67
 
68
68
  private
69
+
69
70
  def find_resource
70
- not_found and return if params[:id].blank?
71
+ not_found && return if params[:id].blank?
71
72
  instance_variable_set("@scap_content", resource_scope.find(params[:id]))
72
73
  end
73
74
 
@@ -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 raise message
13
+ instance_variable_get(:"@tailoring_file") || raise(message)
14
14
  end
15
15
 
16
16
  api :GET, '/compliance/tailoring_files', N_('List Tailoring files')
@@ -67,8 +67,9 @@ module Api::V2
67
67
  end
68
68
 
69
69
  private
70
+
70
71
  def find_resource
71
- not_found and return if params[:id].blank?
72
+ not_found && return if params[:id].blank?
72
73
  instance_variable_set("@tailoring_file", resource_scope.find(params[:id]))
73
74
  end
74
75
 
@@ -54,7 +54,7 @@ class ArfReportsController < ApplicationController
54
54
  if @arf_report.destroy
55
55
  process_success(:success_msg => _("Successfully deleted ARF report."), :success_redirect => arf_reports_path)
56
56
  else
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})
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
59
59
  end
60
60
 
@@ -83,18 +83,18 @@ class ArfReportsController < ApplicationController
83
83
  @arf_reports = ::ForemanOpenscap::ArfReport.where(:id => params[:arf_report_ids])
84
84
  if @arf_reports.empty?
85
85
  error _('No compliance reports were found.')
86
- redirect_to(arf_reports_path) and return false
86
+ redirect_to(arf_reports_path) && (return false)
87
87
  end
88
88
  else
89
89
  error _('No compliance reports selected')
90
- redirect_to(arf_reports_path) and return false
90
+ redirect_to(arf_reports_path) && (return false)
91
91
  end
92
92
  return @arf_reports
93
93
  rescue => e
94
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
- redirect_to arf_reports_path and return false
97
+ redirect_to(arf_reports_path) && (return false)
98
98
  end
99
99
 
100
100
  def action_permission
@@ -35,7 +35,7 @@ class PoliciesController < ApplicationController
35
35
  if @policy.wizard_completed? && @policy.save
36
36
  process_success :success_redirect => policies_path
37
37
  elsif @policy.valid?
38
- render 'new' and return
38
+ render('new') && return
39
39
  else
40
40
  @policy.rewind_step
41
41
  process_error :object => @policy
@@ -64,7 +64,7 @@ class PoliciesController < ApplicationController
64
64
  def scap_content_selected
65
65
  if params[:scap_content_id] && (@scap_content = ::ForemanOpenscap::ScapContent.find(params[:scap_content_id]))
66
66
  @policy ||= ::ForemanOpenscap::Policy.new
67
- render :partial => 'scap_content_results', :locals => {:policy => @policy}
67
+ render :partial => 'scap_content_results', :locals => { :policy => @policy }
68
68
  end
69
69
  end
70
70
 
@@ -104,6 +104,7 @@ class PoliciesController < ApplicationController
104
104
  end
105
105
 
106
106
  private
107
+
107
108
  def find_by_id
108
109
  @policy = resource_base.find(params[:id])
109
110
  end
@@ -118,18 +119,18 @@ class PoliciesController < ApplicationController
118
119
  @hosts = Host.where("id IN (?)", params[:host_ids])
119
120
  if @hosts.empty?
120
121
  error _('No hosts were found.')
121
- redirect_to(hosts_path) and return false
122
+ redirect_to(hosts_path) && (return false)
122
123
  end
123
124
  else
124
125
  error _('No hosts selected')
125
- redirect_to(hosts_path) and return false
126
+ redirect_to(hosts_path) && (return false)
126
127
  end
127
128
  return @hosts
128
129
  rescue => e
129
130
  error _("Something went wrong while selecting hosts - %s") % e
130
131
  logger.debug e.message
131
132
  logger.debug e.backtrace.join("\n")
132
- redirect_to hosts_path and return false
133
+ redirect_to(hosts_path) && (return false)
133
134
  end
134
135
 
135
136
  def action_permission
@@ -15,8 +15,8 @@ class ScapContentsController < ApplicationController
15
15
 
16
16
  def show
17
17
  send_data @scap_content.scap_file,
18
- :type => 'application/xml',
19
- :filename => @scap_content.original_filename
18
+ :type => 'application/xml',
19
+ :filename => @scap_content.original_filename
20
20
  end
21
21
 
22
22
  def new
@@ -49,6 +49,7 @@ class ScapContentsController < ApplicationController
49
49
  end
50
50
 
51
51
  private
52
+
52
53
  def find_by_id
53
54
  @scap_content = resource_base.find(params[:id])
54
55
  end
@@ -58,5 +59,4 @@ class ScapContentsController < ApplicationController
58
59
  params[:scap_content][:original_filename] = scap_raw_file.original_filename
59
60
  params[:scap_content][:scap_file] = scap_raw_file.tempfile.read if scap_raw_file.tempfile.respond_to?(:read)
60
61
  end
61
-
62
62
  end
@@ -10,7 +10,7 @@ module ArfReportDashboardHelper
10
10
  [[:failed, _('Failed')],
11
11
  [:passed, _('Passed')],
12
12
  [:othered, _('Othered')],].each do |i|
13
- data << {:label => i[1], :data => report[i[0]], :color => COLORS[i[0]]}
13
+ data << { :label => i[1], :data => report[i[0]], :color => COLORS[i[0]] }
14
14
  end
15
15
  flot_pie_chart 'overview', _('Compliance reports breakdown'), data, options
16
16
  end
@@ -1,15 +1,15 @@
1
1
  module ArfReportsHelper
2
2
  def report_arf_column(event, style = "")
3
3
  style = "label-default" if event == 0
4
- content_tag(:span, event, :class=>'label ' + style)
4
+ content_tag(:span, event, :class => 'label ' + style)
5
5
  end
6
6
 
7
7
  def show_logs
8
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
- select(nil, 'level', [[_('All messages'), 'info'],[_('Failed and Othered'), 'warning'],[_('Failed only'), 'error']],
12
- {}, {:class=>"col-md-1 form-control", :onchange =>"filter_by_level(this);"})
11
+ select(nil, 'level', [[_('All messages'), 'info'], [_('Failed and Othered'), 'warning'], [_('Failed only'), 'error']],
12
+ {}, { :class => "col-md-1 form-control", :onchange => "filter_by_level(this);" })
13
13
  end
14
14
  end
15
15
 
@@ -46,11 +46,11 @@ module ArfReportsHelper
46
46
  end
47
47
 
48
48
  def multiple_actions_arf_report_select
49
- select_action_button(_("Select Action"), {:id => 'submit_multiple'},
50
- multiple_actions_arf_report.map do |action|
51
- link_to_function(action[0], "buildArfModal(this, '#{action[1]}')",
52
- :'data-dialog-title' => _("%s - The following compliance reports are about to be changed") % action[0])
53
- end.flatten)
49
+ select_action_button(_("Select Action"), { :id => 'submit_multiple' },
50
+ multiple_actions_arf_report.map do |action|
51
+ link_to_function(action[0], "buildArfModal(this, '#{action[1]}')",
52
+ :'data-dialog-title' => _("%s - The following compliance reports are about to be changed") % action[0])
53
+ end.flatten)
54
54
  end
55
55
 
56
56
  def openscap_proxy_link(arf_report)
@@ -1,5 +1,4 @@
1
1
  module ComplianceDashboardHelper
2
-
3
2
  def latest_compliance_headers
4
3
  string = "<th class='col-md-7'>#{_("Host")}</th>"
5
4
  string += "<th class='col-md-3'>#{_("Policy")}</th>"
@@ -12,5 +11,4 @@ module ComplianceDashboardHelper
12
11
 
13
12
  string.html_safe
14
13
  end
15
-
16
14
  end
@@ -1,11 +1,10 @@
1
1
  module ComplianceHostsHelper
2
-
3
2
  def host_policy_breakdown_chart(report, options = {})
4
3
  data = []
5
4
  [[:passed, _('Passed')],
6
5
  [:failed, _('Failed')],
7
6
  [:othered, _('Other')],].each do |i|
8
- data << {:label => i[1], :data => report[i[0]], :color => ArfReportDashboardHelper::COLORS[i[0]]}
7
+ data << { :label => i[1], :data => report[i[0]], :color => ArfReportDashboardHelper::COLORS[i[0]] }
9
8
  end
10
9
  flot_pie_chart 'overview', _('Compliance reports breakdown'), data, options
11
10
  end
@@ -15,12 +14,12 @@ module ComplianceHostsHelper
15
14
  failed = []
16
15
  othered = []
17
16
  @host.arf_reports.of_policy(policy_id).each do |report|
18
- passed << [report.created_at.to_i*1000, report.passed]
19
- failed << [report.created_at.to_i*1000, report.failed]
20
- othered << [report.created_at.to_i*1000, report.othered]
17
+ passed << [report.created_at.to_i * 1000, report.passed]
18
+ failed << [report.created_at.to_i * 1000, report.failed]
19
+ othered << [report.created_at.to_i * 1000, report.othered]
21
20
  end
22
- [{:label => _("Passed"), :data => passed, :color => ArfReportDashboardHelper::COLORS[:passed]},
23
- {:label => _("Failed"), :data => failed, :color => ArfReportDashboardHelper::COLORS[:failed]},
24
- {:label => _("Othered"), :data => othered, :color => ArfReportDashboardHelper::COLORS[:othered]}]
21
+ [{ :label => _("Passed"), :data => passed, :color => ArfReportDashboardHelper::COLORS[:passed] },
22
+ { :label => _("Failed"), :data => failed, :color => ArfReportDashboardHelper::COLORS[:failed] },
23
+ { :label => _("Othered"), :data => othered, :color => ArfReportDashboardHelper::COLORS[:othered] }]
25
24
  end
26
25
  end
@@ -17,32 +17,32 @@ module PoliciesHelper
17
17
  scap_contents = ::ForemanOpenscap::ScapContent.authorized(:view_scap_contents).all
18
18
  if scap_contents.length > 1
19
19
  select_f form, :scap_content_id, scap_contents, :id, :title,
20
- {:include_blank => _("Choose existing SCAP Content")},
21
- {:label => _("SCAP Content"),
22
- :onchange => 'scap_content_selected(this);',
23
- :'data-url' => method_path('scap_content_selected')}
20
+ { :include_blank => _("Choose existing SCAP Content") },
21
+ { :label => _("SCAP Content"),
22
+ :onchange => 'scap_content_selected(this);',
23
+ :'data-url' => method_path('scap_content_selected') }
24
24
  else
25
25
  select_f form, :scap_content_id, scap_contents, :id, :title,
26
- {:label => _("SCAP Content"),
27
- :onchange => 'scap_content_selected(this);',
28
- :'data-url' => method_path('scap_content_selected')}
26
+ { :label => _("SCAP Content"),
27
+ :onchange => 'scap_content_selected(this);',
28
+ :'data-url' => method_path('scap_content_selected') }
29
29
  end
30
30
  end
31
31
 
32
32
  def scap_content_profile_selector(form)
33
33
  if profiles_selection.length == 1
34
34
  select_f form, :scap_content_profile_id, profiles_selection, :id, :title,
35
- {:selected => @policy.scap_content_profile_id },
36
- {:label => _("XCCDF Profile"),
37
- :disabled => profiles_selection.empty? ? true : false,
38
- :help_inline => :indicator}
35
+ { :selected => @policy.scap_content_profile_id },
36
+ { :label => _("XCCDF Profile"),
37
+ :disabled => profiles_selection.empty? ? true : false,
38
+ :help_inline => :indicator }
39
39
  else
40
40
  select_f form, :scap_content_profile_id, profiles_selection, :id, :title,
41
- {:selected => @policy.scap_content_profile_id,
42
- :include_blank => _("Default XCCDF profile")},
43
- {:label => _("XCCDF Profile"),
44
- :disabled => profiles_selection.empty? ? true : false,
45
- :help_inline => :indicator}
41
+ { :selected => @policy.scap_content_profile_id,
42
+ :include_blank => _("Default XCCDF profile") },
43
+ { :label => _("XCCDF Profile"),
44
+ :disabled => profiles_selection.empty? ? true : false,
45
+ :help_inline => :indicator }
46
46
  end
47
47
  end
48
48
 
@@ -66,12 +66,12 @@ module PoliciesHelper
66
66
  end
67
67
  end
68
68
 
69
- def submit_or_cancel_policy(form, overwrite = nil, args = { })
69
+ def submit_or_cancel_policy(form, overwrite = nil, args = {})
70
70
  args[:cancel_path] ||= send("#{controller_name}_path")
71
71
  content_tag(:div, :class => "clearfix") do
72
72
  content_tag(:div, :class => "form-actions") do
73
73
  text = overwrite ? overwrite : _("Submit")
74
- options = {:class => "btn btn-primary"}
74
+ options = { :class => "btn btn-primary" }
75
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
@@ -12,16 +12,16 @@ module PolicyDashboardHelper
12
12
  [:incompliant_hosts, _('Incompliant hosts')],
13
13
  [:inconclusive_hosts, _('Inconclusive')],
14
14
  [:report_missing, _('Not audited')],].each do |i|
15
- data << {:label => i[1], :data => report[i[0]], :color => COLORS[i[0]]}
15
+ data << { :label => i[1], :data => report[i[0]], :color => COLORS[i[0]] }
16
16
  end
17
17
  flot_pie_chart 'overview', _('Compliance Status'), data, options
18
18
  end
19
19
 
20
20
  def status_link(name, label, path)
21
21
  content_tag :li do
22
- content_tag(:i, raw('&nbsp;'), :class=>'label', :style => 'background-color:' + COLORS[label]) +
22
+ content_tag(:i, raw('&nbsp;'), :class => 'label', :style => 'background-color:' + COLORS[label]) +
23
23
  raw('&nbsp;') +
24
- link_to(name, path, :class=>'dashboard-links') +
24
+ link_to(name, path, :class => 'dashboard-links') +
25
25
  content_tag(:h4, @report[label])
26
26
  end
27
27
  end
@@ -1,6 +1,5 @@
1
1
  module ::ProxyAPI
2
2
  class AvailableProxy
3
-
4
3
  HTTP_ERRORS = [
5
4
  EOFError,
6
5
  Errno::ECONNRESET,
@@ -8,7 +7,8 @@ module ::ProxyAPI
8
7
  Net::HTTPBadResponse,
9
8
  Net::HTTPHeaderSyntaxError,
10
9
  Net::ProtocolError,
11
- Timeout::Error
10
+ Timeout::Error,
11
+ ProxyAPI::ProxyException
12
12
  ].freeze
13
13
 
14
14
  def initialize(args)
@@ -21,7 +21,7 @@ module ::ProxyAPI
21
21
  raise ::ProxyAPI::ProxyException.new(url, e, N_("Request timed out. Please try increasing Settings -> proxy_request_timeout"))
22
22
  rescue RestClient::ResourceNotFound => e
23
23
  raise ::ProxyAPI::ProxyException.new(url, e,
24
- N_("Could not validate %s. Please make sure you have appropriate proxy version to use this functionality") % scap_file.class)
24
+ N_("Could not validate %s. Please make sure you have appropriate proxy version to use this functionality") % scap_file.class)
25
25
  end
26
26
 
27
27
  def policy_html_guide(scap_file, policy)
@@ -1,6 +1,5 @@
1
1
  module ForemanOpenscap
2
2
  class PolicyMailer < ::ApplicationMailer
3
-
4
3
  def policy_summary(options = {})
5
4
  set_url
6
5
  user = ::User.find(options[:user])
@@ -37,6 +36,5 @@ module ForemanOpenscap
37
36
  end
38
37
  @changed_hosts.uniq
39
38
  end
40
-
41
39
  end
42
40
  end
@@ -14,7 +14,7 @@ module ForemanOpenscap
14
14
  { :conditions => ArfReport.arel_table[:id].in(
15
15
  PolicyArfReport.select(PolicyArfReport.arel_table[:arf_report_id])
16
16
  .of_policy(Policy.find_by(name: cond).id).ast
17
- ).to_sql}
17
+ ).to_sql }
18
18
  end
19
19
 
20
20
  def search_by_comply_with(_key, _operator, policy_name)
@@ -34,7 +34,7 @@ module ForemanOpenscap
34
34
  { :conditions => ArfReport.arel_table[:id].in(
35
35
  ArfReport.select(ArfReport.arel_table[:id])
36
36
  .latest_of_policy(Policy.find_by(name: cond)).instance_eval(&selection).ast
37
- ).to_sql}
37
+ ).to_sql }
38
38
  end
39
39
 
40
40
  def search_by_last_for(key, operator, by)
@@ -68,19 +68,19 @@ module ForemanOpenscap
68
68
 
69
69
  included do
70
70
  scoped_search :relation => :policy, :on => :name, :complete_value => true, :rename => :compliance_policy,
71
- :only_explicit => true, :ext_method => :search_by_policy_name
71
+ :only_explicit => true, :ext_method => :search_by_policy_name
72
72
 
73
73
  scoped_search :on => :id, :rename => :last_for, :complete_value => { :host => 0, :policy => 1 },
74
- :only_explicit => true, :ext_method => :search_by_last_for
74
+ :only_explicit => true, :ext_method => :search_by_last_for
75
75
 
76
76
  scoped_search :relation => :policy, :on => :name, :complete_value => true, :rename => :comply_with,
77
- :only_explicit => true, :operators => ['= '], :ext_method => :search_by_comply_with
77
+ :only_explicit => true, :operators => ['= '], :ext_method => :search_by_comply_with
78
78
 
79
79
  scoped_search :relation => :policy, :on => :name, :complete_value => true, :rename => :not_comply_with,
80
- :only_explicit => true, :operators => ['= '], :ext_method => :search_by_not_comply_with
80
+ :only_explicit => true, :operators => ['= '], :ext_method => :search_by_not_comply_with
81
81
 
82
82
  scoped_search :relation => :policy, :on => :name, :complete_value => true, :rename => :inconclusive_with,
83
- :only_explicit => true, :operators => ['= '], :ext_method => :search_by_inconclusive_with
83
+ :only_explicit => true, :operators => ['= '], :ext_method => :search_by_inconclusive_with
84
84
 
85
85
  compliance_status_scoped_search 'passed', :on => :status, :rename => :compliance_passed
86
86
  compliance_status_scoped_search 'failed', :on => :status, :rename => :compliance_failed
@@ -10,7 +10,7 @@ module ForemanOpenscap
10
10
 
11
11
  validates_with ForemanOpenscap::DataStreamValidator
12
12
 
13
- after_save :create_profiles
13
+ after_save :create_profiles, :if => lambda { |ds_content| ds_content.scap_file_changed? }
14
14
 
15
15
  before_validation :redigest, :if => lambda { |ds_content| ds_content.persisted? && ds_content.scap_file_changed? }
16
16
  before_destroy ActiveRecord::Base::EnsureNotUsedBy.new(:policies)
@@ -13,13 +13,16 @@ module ForemanOpenscap
13
13
  scoped_search :relation => :policies, :on => :name, :complete_value => true, :rename => :compliance_policy,
14
14
  :only_explicit => true, :operators => ['= '], :ext_method => :search_by_policy_name
15
15
 
16
+ scoped_search :relation => :policies, :on => :id, :complete_value => false, :rename => :compliance_policy_id,
17
+ :only_explicit => true, :operators => ['= ', '!= '], :ext_method => :search_by_policy_id
18
+
16
19
  scoped_search :relation => :policies, :on => :name, :complete_value => true, :rename => :compliance_report_missing_for,
17
20
  :only_explicit => true, :operators => ['= ', '!= '], :ext_method => :search_by_missing_arf
18
21
 
19
22
  scoped_search :relation => :compliance_status_object, :on => :status, :rename => :compliance_status,
20
- :complete_value => {:compliant => ::ForemanOpenscap::ComplianceStatus::COMPLIANT,
21
- :incompliant => ::ForemanOpenscap::ComplianceStatus::INCOMPLIANT,
22
- :inconclusive => ::ForemanOpenscap::ComplianceStatus::INCONCLUSIVE}
23
+ :complete_value => { :compliant => ::ForemanOpenscap::ComplianceStatus::COMPLIANT,
24
+ :incompliant => ::ForemanOpenscap::ComplianceStatus::INCOMPLIANT,
25
+ :inconclusive => ::ForemanOpenscap::ComplianceStatus::INCONCLUSIVE }
23
26
  after_update :puppetrun!, :if => ->(host) { Setting[:puppetrun] && host.changed.include?('openscap_proxy_id') }
24
27
 
25
28
  scope :comply_with, lambda { |policy|
@@ -110,15 +113,22 @@ module ForemanOpenscap
110
113
  { :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 }
111
114
  end
112
115
 
116
+ def search_by_policy_id(key, operator, policy_id)
117
+ cond = sanitize_sql_for_conditions(["foreman_openscap_policies.id #{operator} ?", value_to_sql(operator, policy_id)])
118
+ search_assigned_all cond, []
119
+ end
120
+
113
121
  def search_by_missing_arf(key, operator, policy_name)
114
122
  cond = sanitize_sql_for_conditions(["foreman_openscap_policies.name #{operator} ?", value_to_sql(operator, policy_name)])
115
123
 
116
124
  host_ids_from_arf_of_policy = ForemanOpenscap::ArfReport.joins(:policy).where(cond).pluck(:host_id).uniq
117
125
 
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
126
+ search_assigned_all cond, host_ids_from_arf_of_policy
127
+ end
121
128
 
129
+ def search_assigned_all(condition, not_in_host_ids)
130
+ direct_result = policy_assigned_directly_host_ids condition, not_in_host_ids
131
+ hg_result = policy_assigned_using_hostgroup_host_ids condition, not_in_host_ids
122
132
  result = (direct_result + hg_result).uniq
123
133
  { :conditions => "hosts.id IN (#{result.empty? ? 'NULL' : result.join(',')})" }
124
134
  end
@@ -5,7 +5,7 @@ module ForemanOpenscap
5
5
  def openscap_proxy_api
6
6
  return @openscap_api if @openscap_api
7
7
  proxy_url = openscap_proxy.url if openscap_proxy
8
- raise ::Foreman::Exception.new(N_("No OpenSCAP proxy found for %{class} with %{id}"), { :class => self.class, :id => id }) unless proxy_url
8
+ raise ::Foreman::Exception.new(N_("No OpenSCAP proxy found for %{class} with id %{id}"), { :class => self.class, :id => id }) unless proxy_url
9
9
  @openscap_api = ::ProxyAPI::Openscap.new(:url => proxy_url)
10
10
  end
11
11
  end
@@ -10,15 +10,16 @@ module ForemanOpenscap
10
10
  BIT_NUM = 10
11
11
  MAX = (1 << BIT_NUM) - 1
12
12
 
13
- scoped_search :on => :status, :offset => 0, :word_size => 4*BIT_NUM, :complete_value => {:true => true, :false => false}, :rename => :eventful
13
+ scoped_search :on => :status, :offset => 0, :word_size => 4 * BIT_NUM, :complete_value => { :true => true, :false => false }, :rename => :eventful
14
14
 
15
15
  has_one :policy_arf_report
16
16
  has_one :policy, :through => :policy_arf_report, :dependent => :destroy
17
17
  has_one :asset, :through => :host, :class_name => 'ForemanOpenscap::Asset', :as => :assetable
18
- after_save :assign_locations_organizations
19
18
  has_one :log, :foreign_key => :report_id
20
19
  belongs_to :openscap_proxy, :class_name => "SmartProxy"
21
20
 
21
+ after_save :assign_locations_organizations
22
+ before_destroy :destroy_from_proxy
22
23
 
23
24
  delegate :asset=, :to => :host
24
25
 
@@ -139,7 +140,7 @@ module ForemanOpenscap
139
140
  end
140
141
  msg.save!
141
142
  end
142
- #TODO: log level
143
+ # TODO: log level
143
144
  Log.create!(:source_id => src.id,
144
145
  :message_id => msg.id,
145
146
  :level => :info,
@@ -187,7 +188,7 @@ module ForemanOpenscap
187
188
  policy.id == other.policy.id
188
189
  end
189
190
 
190
- def destroy
191
+ def destroy_from_proxy
191
192
  if host
192
193
  begin
193
194
  openscap_proxy_api.destroy_report(self, ForemanOpenscap::Helper::find_name_or_uuid_by_host(host))
@@ -198,7 +199,6 @@ module ForemanOpenscap
198
199
  else
199
200
  logger.error "Failed to delete report with id #{id} from proxy, no host associated with report"
200
201
  end
201
- super
202
202
  end
203
203
 
204
204
  def self.newline_to_space(string)