foreman_openscap 0.5.3 → 0.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -7
- data/app/assets/javascripts/foreman_openscap/policy_edit.js +2 -2
- data/app/controllers/api/v2/compliance/arf_reports_controller.rb +3 -9
- data/app/controllers/api/v2/compliance/policies_controller.rb +3 -9
- data/app/controllers/api/v2/compliance/scap_contents_controller.rb +18 -10
- data/app/controllers/arf_reports_controller.rb +5 -5
- data/app/controllers/policies_controller.rb +2 -2
- data/app/helpers/concerns/foreman_openscap/lookup_keys_helper_extensions.rb +14 -0
- data/app/helpers/dashboard_helper.rb +26 -0
- data/app/lib/proxy_api/available_proxy.rb +20 -2
- data/app/lib/proxy_api/migration.rb +13 -0
- data/app/lib/proxy_api/openscap.rb +2 -2
- data/app/mailers/foreman_openscap/policy_mailer.rb +1 -1
- data/app/models/concerns/foreman_openscap/compliance_status_scoped_search.rb +1 -1
- data/app/models/concerns/foreman_openscap/host_extensions.rb +1 -1
- data/app/models/concerns/foreman_openscap/log_extensions.rb +10 -0
- data/app/models/concerns/foreman_openscap/openscap_proxy_core_extensions.rb +29 -9
- data/app/models/concerns/foreman_openscap/openscap_proxy_extensions.rb +1 -1
- data/app/models/foreman_openscap/arf_report.rb +2 -4
- data/app/models/foreman_openscap/policy.rb +3 -3
- data/app/models/foreman_openscap/scap_content.rb +7 -6
- data/app/services/foreman_openscap/report_dashboard/data.rb +1 -1
- data/app/views/api/v2/compliance/arf_reports/base.json.rabl +4 -1
- data/app/views/api/v2/compliance/arf_reports/main.json.rabl +5 -1
- data/app/views/api/v2/compliance/common/_loc.json.rabl +3 -0
- data/app/views/api/v2/compliance/common/_org.json.rabl +3 -0
- data/app/views/api/v2/compliance/policies/base.json.rabl +4 -1
- data/app/views/api/v2/compliance/scap_contents/base.json.rabl +4 -1
- data/app/views/api/v2/compliance/scap_contents/show.json.rabl +7 -1
- data/app/views/arf_reports/_list.html.erb +7 -1
- data/app/views/arf_reports/delete_multiple.html.erb +1 -1
- data/app/views/arf_reports/show.html.erb +1 -1
- data/app/views/compliance_hosts/_openscap_proxy.html.erb +1 -6
- data/app/views/compliance_hosts/show.html.erb +1 -1
- data/app/views/dashboard/_compliance_host_reports_widget.html.erb +2 -6
- data/app/views/foreman_openscap/policy_mailer/policy_summary.erb +1 -1
- data/app/views/policies/_form.html.erb +1 -1
- data/app/views/policies/welcome.html.erb +7 -6
- data/app/views/scap_contents/welcome.html.erb +1 -1
- data/config/routes.rb +5 -1
- data/db/migrate/20150821100137_migrate_from_scaptimony.rb +7 -6
- data/db/migrate/20150929152345_move_arf_reports_to_reports_table.rb +0 -97
- data/db/migrate/20151120090851_add_openscap_proxy_to_host_and_hostgroup.rb +0 -12
- data/db/seeds.d/openscap_policy_notification.rb +1 -1
- data/lib/foreman_openscap/bulk_upload.rb +1 -0
- data/lib/foreman_openscap/data_migration.rb +82 -0
- data/lib/foreman_openscap/engine.rb +5 -6
- data/lib/foreman_openscap/version.rb +1 -1
- data/lib/tasks/foreman_openscap_tasks.rake +14 -0
- data/test/factories/arf_report_factory.rb +1 -0
- data/test/factories/compliance_host_factory.rb +11 -1
- data/test/functional/api/v2/compliance/arf_reports_controller_test.rb +3 -1
- data/test/test_plugin_helper.rb +23 -2
- data/test/unit/scap_content_test.rb +1 -1
- data/test/unit/services/report_dashboard/data_test.rb +25 -0
- metadata +202 -194
- data/app/assets/javascripts/foreman_openscap/openscap_proxy.js +0 -52
- data/app/controllers/concerns/foreman_openscap/hosts_common_controller_extensions.rb +0 -45
- data/db/migrate/20151023131950_link_arf_report_directly_to_host.rb +0 -21
- data/db/seeds.d/openscap_scap_default.rb +0 -2
@@ -48,14 +48,14 @@ module ForemanOpenscap
|
|
48
48
|
|
49
49
|
def to_html
|
50
50
|
if scap_content.nil? || scap_content_profile.nil?
|
51
|
-
return (_('
|
52
|
-
{ :scap_content => self.scap_content, :profile => self.scap_content_profile }).html_safe
|
51
|
+
return ("<h2>%s</h2>" % (_('Cannot generate HTML guide for %{scap_content}/%{profile}') %
|
52
|
+
{ :scap_content => self.scap_content, :profile => self.scap_content_profile })).html_safe
|
53
53
|
end
|
54
54
|
|
55
55
|
if (proxy = scap_content.proxy_url)
|
56
56
|
api = ProxyAPI::Openscap.new(:url => proxy)
|
57
57
|
else
|
58
|
-
return
|
58
|
+
return ("<h2>%s</h2>" % _('No valid OpenSCAP proxy server found.')).html_safe
|
59
59
|
end
|
60
60
|
|
61
61
|
api.policy_html_guide(scap_content.scap_file, scap_content_profile.profile_id)
|
@@ -6,12 +6,12 @@ module ForemanOpenscap
|
|
6
6
|
return unless scap_content.scap_file_changed?
|
7
7
|
|
8
8
|
unless SmartProxy.with_features('Openscap').any?
|
9
|
-
scap_content.errors.add(:base, _('No
|
9
|
+
scap_content.errors.add(:base, _('No proxy with OpenSCAP features'))
|
10
10
|
return false
|
11
11
|
end
|
12
12
|
|
13
13
|
if scap_content.proxy_url.nil?
|
14
|
-
scap_content.errors.add(:base, _('No
|
14
|
+
scap_content.errors.add(:base, _('No available proxy to validate SCAP content'))
|
15
15
|
return false
|
16
16
|
end
|
17
17
|
|
@@ -29,7 +29,7 @@ module ForemanOpenscap
|
|
29
29
|
|
30
30
|
|
31
31
|
unless (scap_content.scap_content_profiles.map(&:profile_id) - scap_content.fetch_profiles.keys).empty?
|
32
|
-
scap_content.errors.add(:scap_file, _('Changed file does not include existing SCAP
|
32
|
+
scap_content.errors.add(:scap_file, _('Changed file does not include existing SCAP content profiles'))
|
33
33
|
return false
|
34
34
|
end
|
35
35
|
end
|
@@ -90,10 +90,11 @@ module ForemanOpenscap
|
|
90
90
|
end
|
91
91
|
|
92
92
|
def proxy_url
|
93
|
-
@proxy_url ||= SmartProxy.with_features('Openscap').
|
93
|
+
@proxy_url ||= SmartProxy.with_features('Openscap').find do |proxy|
|
94
94
|
available = ProxyAPI::AvailableProxy.new(:url => proxy.url)
|
95
|
-
|
96
|
-
end
|
95
|
+
available.available?
|
96
|
+
end.try(:url)
|
97
|
+
@proxy_url
|
97
98
|
end
|
98
99
|
|
99
100
|
def as_json(*args)
|
@@ -31,7 +31,7 @@ module ForemanOpenscap::ReportDashboard
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def othered_breakdowns
|
34
|
-
Log.where(:result =>
|
34
|
+
Log.where(:result => Log::SCAP_RESULT[2..-1]).joins("INNER JOIN reports ON reports.id = report_id").count(:id).to_f
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
@@ -1,3 +1,6 @@
|
|
1
1
|
object @policy
|
2
2
|
|
3
|
-
|
3
|
+
extends "api/v2/compliance/common/org"
|
4
|
+
extends "api/v2/compliance/common/loc"
|
5
|
+
|
6
|
+
attributes :id, :name, :period, :weekday, :description, :scap_content_id, :scap_content_profile_id, :day_of_month, :cron_line
|
@@ -13,7 +13,13 @@
|
|
13
13
|
<% for arf_report in @arf_reports %>
|
14
14
|
<tr>
|
15
15
|
<td class="ca">
|
16
|
-
<%= check_box_tag "host_ids[]",
|
16
|
+
<%= check_box_tag "host_ids[]",
|
17
|
+
nil,
|
18
|
+
false,
|
19
|
+
:id => "host_ids_#{arf_report.id}",
|
20
|
+
:disabled => !authorized_for(:controller => :arf_reports, :action => :destroy),
|
21
|
+
:class => 'host_select_boxes',
|
22
|
+
:onclick => 'hostChecked(this)' %>
|
17
23
|
</td>
|
18
24
|
<td><%= name_column(arf_report.host) %></td>
|
19
25
|
<td><%= display_link_if_authorized(_("%s ago") % time_ago_in_words(arf_report.reported_at), hash_for_arf_report_path(:id => arf_report.id)) %></td>
|
@@ -25,5 +25,5 @@
|
|
25
25
|
|
26
26
|
<%= form_tag submit_delete_multiple_arf_reports_path({:arf_report_ids => params[:arf_report_ids]}) do %>
|
27
27
|
<span class="label label-danger"><%= _('Delete') %></span>
|
28
|
-
<%= _('these
|
28
|
+
<%= _('these Complianace reports') %>
|
29
29
|
<% end %>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<%= javascript 'foreman_openscap/reports' %>
|
2
2
|
<%= stylesheet 'foreman_openscap/reports' %>
|
3
3
|
<% title "#{@arf_report.host}" %>
|
4
|
-
<p class='ra'> <%= _("Reported at %s
|
4
|
+
<p class='ra'> <%= _("Reported at %s") % @arf_report.reported_at %> </p>
|
5
5
|
|
6
6
|
<% content_for(:search_bar) {show_logs} %>
|
7
7
|
|
@@ -1,8 +1,3 @@
|
|
1
|
-
<%= javascript 'foreman_openscap/openscap_proxy' %>
|
2
|
-
<% data_url = @host ? openscap_proxy_changed_hosts_path : openscap_proxy_changed_hostgroups_path%>
|
3
1
|
<%= select_f f, :openscap_proxy_id, SmartProxy.with_features("Openscap"), :id, :name,
|
4
2
|
{ :include_blank => blank_or_inherit_f(f, :openscap_proxy) },
|
5
|
-
{ :label => _('Openscap Proxy')
|
6
|
-
:onchange => 'updateOpenscapProxy(this)',
|
7
|
-
:'data-url' => data_url,
|
8
|
-
:help_inline => :indicator } %>
|
3
|
+
{ :label => _('Openscap Proxy') } %>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<%= javascript 'dashboard', 'foreman_openscap/scap_hosts_show' %>
|
2
2
|
|
3
|
-
<% title
|
3
|
+
<% title n_("%s compliance report by policy", "%s compliance reports by policy"m , host.combined_policies.length) % @host.to_label %>
|
4
4
|
<% @host.combined_policies.each do |policy| %>
|
5
5
|
<h2 class="center-block"><%= _('Policy %s') % policy %></h2>
|
6
6
|
<div class="row">
|
@@ -5,11 +5,7 @@
|
|
5
5
|
<% else %>
|
6
6
|
<table class="table table-striped ellipsis">
|
7
7
|
<tr>
|
8
|
-
|
9
|
-
<th><%= _('Policy') %></th>
|
10
|
-
<%= translated_header(s_('Passed|P'), _('Passed')).html_safe %>
|
11
|
-
<%= translated_header(s_('Failed|F'), _('Failed')).html_safe %>
|
12
|
-
<%= translated_header(s_('Othered|O'), _('Othered')).html_safe %>
|
8
|
+
<%= latest_headers() %>
|
13
9
|
</tr>
|
14
10
|
<% latest_reports.each do |report| %>
|
15
11
|
<tr>
|
@@ -21,4 +17,4 @@
|
|
21
17
|
</tr>
|
22
18
|
<% end %>
|
23
19
|
</table>
|
24
|
-
<% end %>
|
20
|
+
<% end %>
|
@@ -6,7 +6,7 @@
|
|
6
6
|
<title> Summary report for OpenScap from Foreman </title>
|
7
7
|
</head>
|
8
8
|
<body style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; color: #3f3f3f; background-color: #f1f1f1; padding: 10px 24px">
|
9
|
-
<h2 style="font-weight: normal; text-transform: uppercase; font-size: 120%;"><%= _("<b>Foreman</b>
|
9
|
+
<h2 style="font-weight: normal; text-transform: uppercase; font-size: 120%;"><%= _("<b>Foreman</b> OpenSCAP summary").html_safe %></h2>
|
10
10
|
<h2 style="margin: 5px 0px;"><%= _("Summary from %{time} ago to now") % {:time => distance_of_time_in_words(Time.now - @time)} %></h2>
|
11
11
|
<h3 style="margin: 0px;"><%= _("Summary report from Foreman server at %{foreman_url}") % {:foreman_url => Setting[:foreman_url]} %></h3>
|
12
12
|
<div style="background: #e1e2e3; padding: 20px 40px; margin: 5px 0px 10px;">
|
@@ -14,7 +14,7 @@
|
|
14
14
|
<% if show_organization_tab? %>
|
15
15
|
<li><a href='#organizations' data-toggle='tab'><%= _('Organizations') %></a></li>
|
16
16
|
<% end %>
|
17
|
-
<li><a href='#hostgroups' data-toggle='tab'><%= _('
|
17
|
+
<li><a href='#hostgroups' data-toggle='tab'><%= _('Host Groups') %></a></li>
|
18
18
|
</ul>
|
19
19
|
<div class="tab-content">
|
20
20
|
<div class="tab-pane active" id="primary">
|
@@ -1,14 +1,15 @@
|
|
1
|
-
<% title_actions display_link_if_authorized(_("New Compliance
|
1
|
+
<% title_actions display_link_if_authorized(_("New Compliance Policy"), hash_for_new_policy_path) %>
|
2
2
|
|
3
3
|
<% title _("Compliance policy configuration") %>
|
4
4
|
<div id="welcome">
|
5
5
|
<p>
|
6
|
-
<%= _('A compliance policy is defined by security professionals who specify desired
|
7
|
-
(often in the form of a checklist) that are to be used in the computing
|
8
|
-
|
6
|
+
<%= _('A compliance policy is defined by security professionals who specify desired ' +
|
7
|
+
'settings (often in the form of a checklist) that are to be used in the computing ' +
|
8
|
+
'environment. Compliance audit is a process of figuring out whether a given object ' +
|
9
|
+
'follows all the rules written out in a compliance policy.') %>
|
9
10
|
</p>
|
10
11
|
<p>
|
11
|
-
<%= (_('In Foreman, a compliance policy checklist is defined via %s, once SCAP content
|
12
|
-
|
12
|
+
<%= (_('In Foreman, a compliance policy checklist is defined via %s, once SCAP content ' +
|
13
|
+
'is present, you can create a policy, assign select host groups and schedule to run.') % link_to(_('SCAP content'), scap_contents_path)).html_safe %>
|
13
14
|
</p>
|
14
15
|
</div>
|
@@ -9,7 +9,7 @@
|
|
9
9
|
and policy compliance evaluation. ') %><small><%= (_('Source: Wikipedia %s') % link_to(_('read more'), 'http://en.wikipedia.org/wiki/Security_Content_Automation_Protocol')).html_safe %></small>
|
10
10
|
</p>
|
11
11
|
<p>
|
12
|
-
<%= (_("In Foreman, scap_contents represent the SCAP security guides on your hosts, and create SCAP profiles for you to assign to hosts /
|
12
|
+
<%= (_("In Foreman, scap_contents represent the SCAP security guides on your hosts, and create SCAP profiles for you to assign to hosts / host groups
|
13
13
|
via %s") % link_to('compliance policies', policies_path)).html_safe %>
|
14
14
|
</p>
|
15
15
|
</div>
|
data/config/routes.rb
CHANGED
@@ -45,7 +45,11 @@ Rails.application.routes.draw do
|
|
45
45
|
scope "(:apiv)", :module => :v2, :defaults => {:apiv => 'v2'},
|
46
46
|
:apiv => /v1|v2/, :constraints => ApiConstraints.new(:version => 2) do
|
47
47
|
namespace :compliance do
|
48
|
-
resources :scap_contents, :except => [:new, :edit]
|
48
|
+
resources :scap_contents, :except => [:new, :edit] do
|
49
|
+
member do
|
50
|
+
get 'xml'
|
51
|
+
end
|
52
|
+
end
|
49
53
|
resources :policies, :except => [:new, :edit] do
|
50
54
|
member do
|
51
55
|
get 'content'
|
@@ -6,13 +6,14 @@ class MigrateFromScaptimony < ActiveRecord::Migration
|
|
6
6
|
def rename_table_indexes(a,b)
|
7
7
|
end
|
8
8
|
end
|
9
|
+
|
10
|
+
execute 'DROP VIEW IF EXISTS scaptimony_arf_report_breakdowns'
|
11
|
+
execute 'DROP VIEW IF EXISTS foreman_openscap_arf_report_breakdowns'
|
12
|
+
|
9
13
|
ActiveRecord::Base.connection.tables.grep(/^scaptimony/).each do |table|
|
10
14
|
rename_table table, table.sub(/^scaptimony/, "foreman_openscap")
|
11
15
|
end
|
12
16
|
|
13
|
-
execute 'DROP VIEW scaptimony_arf_report_breakdowns' if table_exists? 'scaptimony_arf_report_breakdowns'
|
14
|
-
execute 'DROP VIEW foreman_openscap_arf_report_breakdowns' if table_exists? 'foreman_openscap_arf_report_breakdowns'
|
15
|
-
|
16
17
|
execute <<-SQL
|
17
18
|
CREATE VIEW foreman_openscap_arf_report_breakdowns AS
|
18
19
|
SELECT
|
@@ -39,13 +40,13 @@ class MigrateFromScaptimony < ActiveRecord::Migration
|
|
39
40
|
end
|
40
41
|
|
41
42
|
def down
|
43
|
+
execute 'DROP VIEW IF EXISTS scaptimony_arf_report_breakdowns'
|
44
|
+
execute 'DROP VIEW IF EXISTS foreman_openscap_arf_report_breakdowns'
|
45
|
+
|
42
46
|
ActiveRecord::Base.connection.tables.grep(/^foreman_openscap/).each do |table|
|
43
47
|
rename_table table, table.sub(/^foreman_openscap/, "scaptimony")
|
44
48
|
end
|
45
49
|
|
46
|
-
execute 'DROP VIEW scaptimony_arf_report_breakdowns' if table_exists? 'scaptimony_arf_report_breakdowns'
|
47
|
-
execute 'DROP VIEW foreman_openscap_arf_report_breakdowns' if table_exists? 'foreman_openscap_arf_report_breakdowns'
|
48
|
-
|
49
50
|
execute <<-SQL
|
50
51
|
CREATE VIEW scaptimony_arf_report_breakdowns AS
|
51
52
|
SELECT
|
@@ -3,73 +3,13 @@ class MoveArfReportsToReportsTable < ActiveRecord::Migration
|
|
3
3
|
# rubocop:disable Metrics/MethodLength
|
4
4
|
# rubocop:disable Metrics/AbcSize
|
5
5
|
def up
|
6
|
-
old_arf_reports = execute("SELECT * FROM foreman_openscap_arf_reports;")
|
7
|
-
|
8
|
-
#select only reports with existing host
|
9
|
-
old_arf_reports = old_arf_reports.select do |item|
|
10
|
-
asset = ForemanOpenscap::Asset.find item['asset_id']
|
11
|
-
!asset.host.nil? && asset.assetable_type = "Host::Base"
|
12
|
-
end
|
13
|
-
#and remove assets without assetable
|
14
|
-
ForemanOpenscap::Asset.where(:assetable_type => "Host::Base").select { |a| a.host.nil? }.map(&:destroy)
|
15
|
-
ForemanOpenscap::Asset.where(:assetable_type => "Hostgroup").select { |a| a.hostgroup.nil? }.map(&:destroy)
|
16
|
-
|
17
|
-
old_arf_reports.each do |item|
|
18
|
-
metrics = breakdown_to_metrics item["id"]
|
19
|
-
|
20
|
-
#reported_at attribute must be unique
|
21
|
-
reported_at = DateTime.strptime(item["created_at"], "%Y-%m-%d %H:%M:%S")
|
22
|
-
|
23
|
-
reported_at += 1.second until arfs_by_reported(reported_at).empty?
|
24
|
-
|
25
|
-
arf = ForemanOpenscap::ArfReport.create!(:metrics => metrics,
|
26
|
-
:reported_at => reported_at,
|
27
|
-
:created_at => item["created_at"],
|
28
|
-
:updated_at => item["updated_at"],
|
29
|
-
:host_id => item["asset_id"],
|
30
|
-
:status => metrics)
|
31
|
-
|
32
|
-
ForemanOpenscap::PolicyArfReport.create!(:arf_report_id => arf.id, :policy_id => item["policy_id"], :digest => item["digest"])
|
33
|
-
|
34
|
-
xccdf_rules.each { |rule_item| Source.find_or_create(rule_item["xid"]) }
|
35
|
-
|
36
|
-
xccdf_rule_results(item["id"]).each do |rr_item|
|
37
|
-
message = Message.find_or_create("No message for this log")
|
38
|
-
|
39
|
-
rule_item = xccdf_rule(rr_item['xccdf_rule_id'])
|
40
|
-
source = Source.find_or_create(rule_item['xid'])
|
41
|
-
|
42
|
-
Log.create!(:report_id => arf.id,
|
43
|
-
:result => xccdf_result(rr_item["xccdf_result_id"])['name'],
|
44
|
-
:message_id => message.id,
|
45
|
-
:source_id => source.id,
|
46
|
-
:level => :info)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
6
|
execute 'DROP VIEW foreman_openscap_arf_report_breakdowns' if table_exists? 'foreman_openscap_arf_report_breakdowns'
|
51
7
|
drop_table :foreman_openscap_xccdf_results
|
52
8
|
drop_table :foreman_openscap_xccdf_rules
|
53
9
|
drop_table :foreman_openscap_xccdf_rule_results
|
54
|
-
drop_table :foreman_openscap_arf_reports
|
55
|
-
drop_table :foreman_openscap_arf_report_raws
|
56
10
|
end
|
57
11
|
|
58
12
|
def down
|
59
|
-
#warning! we cannot fully revert since arf_report_raws got dropped and we have no way of recreating them
|
60
|
-
create_table :foreman_openscap_arf_reports do |t|
|
61
|
-
t.references :asset, :index => true
|
62
|
-
t.references :policy, :index => true
|
63
|
-
t.datetime :date
|
64
|
-
t.string :digest, :limit => 128
|
65
|
-
|
66
|
-
t.timestamps
|
67
|
-
end
|
68
|
-
add_index :foreman_openscap_arf_reports, :digest, :unique => true
|
69
|
-
|
70
|
-
add_index :foreman_openscap_arf_reports, [:asset_id, :policy_id, :date, :digest],
|
71
|
-
:unique => true, :name => :index_openscap_arf_reports_unique_set
|
72
|
-
|
73
13
|
create_table :foreman_openscap_xccdf_results do |t|
|
74
14
|
t.string :name, :limit => 16, :null => false
|
75
15
|
end
|
@@ -139,41 +79,4 @@ class MoveArfReportsToReportsTable < ActiveRecord::Migration
|
|
139
79
|
end
|
140
80
|
ForemanOpenscap::PolicyArfReport.all.map(&:destroy)
|
141
81
|
end
|
142
|
-
|
143
|
-
private
|
144
|
-
|
145
|
-
def breakdown_to_metrics(report_id)
|
146
|
-
execute("SELECT passed, failed, othered FROM foreman_openscap_arf_report_breakdowns WHERE arf_report_id='#{report_id}';").first
|
147
|
-
end
|
148
|
-
|
149
|
-
def xccdf_rule_results(report_id)
|
150
|
-
execute("SELECT arf_report_id, xccdf_result_id, xccdf_rule_id
|
151
|
-
FROM foreman_openscap_xccdf_rule_results
|
152
|
-
WHERE arf_report_id='#{report_id}';")
|
153
|
-
end
|
154
|
-
|
155
|
-
def xccdf_rules
|
156
|
-
execute("SELECT xid FROM foreman_openscap_xccdf_rules;")
|
157
|
-
end
|
158
|
-
|
159
|
-
def xccdf_rule(rule_id)
|
160
|
-
execute("SELECT xid
|
161
|
-
FROM foreman_openscap_xccdf_rules
|
162
|
-
WHERE foreman_openscap_xccdf_rules.id = '#{rule_id}';").first
|
163
|
-
end
|
164
|
-
|
165
|
-
def xccdf_result(result_id)
|
166
|
-
execute("SELECT name FROM foreman_openscap_xccdf_results WHERE id = '#{result_id}';").first
|
167
|
-
end
|
168
|
-
|
169
|
-
def arfs_by_reported(time)
|
170
|
-
ForemanOpenscap::ArfReport.where(:reported_at => time)
|
171
|
-
end
|
172
|
-
|
173
|
-
def report(arf)
|
174
|
-
execute("SELECT id
|
175
|
-
FROM foreman_openscap_arf_reports
|
176
|
-
WHERE date = '#{arf.reported_at}' AND
|
177
|
-
digest = '#{arf.policy_arf_report.digest}';").first
|
178
|
-
end
|
179
82
|
end
|
@@ -3,18 +3,6 @@ class AddOpenscapProxyToHostAndHostgroup < ActiveRecord::Migration
|
|
3
3
|
add_column :hostgroups, :openscap_proxy_id, :integer
|
4
4
|
add_column :hosts, :openscap_proxy_id, :integer
|
5
5
|
add_column :reports, :openscap_proxy_id, :integer
|
6
|
-
|
7
|
-
#to ensure backward compatiblity
|
8
|
-
#this relies on the fact that only one scap proxy was registered
|
9
|
-
#because there has not been support for multiple scap proxies
|
10
|
-
reports = ForemanOpenscap::ArfReport.where(:openscap_proxy_id => nil)
|
11
|
-
scap_proxy = SmartProxy.with_features("Openscap").first
|
12
|
-
unless scap_proxy.nil?
|
13
|
-
reports.each do |report|
|
14
|
-
report.openscap_proxy = scap_proxy
|
15
|
-
report.save!
|
16
|
-
end
|
17
|
-
end
|
18
6
|
end
|
19
7
|
|
20
8
|
def down
|
@@ -1,6 +1,6 @@
|
|
1
1
|
policy_notification = {
|
2
2
|
:name => :openscap_policy_summary,
|
3
|
-
:description => N_('A summary of reports for
|
3
|
+
:description => N_('A summary of reports for OpenSCAP policies'),
|
4
4
|
:mailer => 'ForemanOpenscap::PolicyMailer',
|
5
5
|
:method => 'policy_summary',
|
6
6
|
:subscription_type => 'report',
|
@@ -30,6 +30,7 @@ module ForemanOpenscap
|
|
30
30
|
scap_content.original_filename = filename
|
31
31
|
scap_content.location_ids = Location.all.map(&:id) if SETTINGS[:locations_enabled]
|
32
32
|
scap_content.organization_ids = Organization.all.map(&:id) if SETTINGS[:organizations_enabled]
|
33
|
+
|
33
34
|
next puts "## SCAP content is invalid: #{scap_content.errors.full_messages.uniq.join(',')} ##" unless scap_content.valid?
|
34
35
|
if scap_content.save
|
35
36
|
puts "Saved #{datastream} as #{scap_content.title}"
|