foreman_openscap 0.1.0 → 0.2.0
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 +4 -4
- data/README.md +7 -3
- data/app/assets/javascript/policy_edit.js +14 -0
- data/app/controllers/scaptimony_arf_reports_controller.rb +31 -0
- data/app/controllers/scaptimony_dashboard_controller.rb +6 -0
- data/app/controllers/scaptimony_policies_controller.rb +58 -0
- data/app/controllers/scaptimony_scap_contents_controller.rb +54 -0
- data/app/helpers/arf_reports_helper.rb +16 -0
- data/app/helpers/scaptimony_policies_helper.rb +7 -0
- data/app/models/concerns/foreman_openscap/arf_report_extensions.rb +1 -2
- data/app/models/concerns/foreman_openscap/policy_extensions.rb +20 -0
- data/app/models/concerns/foreman_openscap/scap_content_extensions.rb +20 -0
- data/app/views/scaptimony_arf_reports/_list.html.erb +27 -0
- data/app/views/scaptimony_arf_reports/index.html.erb +4 -0
- data/app/views/scaptimony_policies/_form.html.erb +39 -0
- data/app/views/scaptimony_policies/_list.html.erb +34 -0
- data/app/views/scaptimony_policies/_scap_content_results.html.erb +10 -0
- data/app/views/scaptimony_policies/edit.html.erb +3 -0
- data/app/views/scaptimony_policies/index.html.erb +9 -0
- data/app/views/scaptimony_policies/new.html.erb +3 -0
- data/app/views/scaptimony_policies/welcome.html.erb +10 -0
- data/app/views/scaptimony_scap_contents/_form.html.erb +18 -0
- data/app/views/scaptimony_scap_contents/_list.html.erb +27 -0
- data/app/views/scaptimony_scap_contents/edit.html.erb +3 -0
- data/app/views/scaptimony_scap_contents/index.html.erb +5 -0
- data/app/views/scaptimony_scap_contents/new.html.erb +3 -0
- data/config/routes.rb +12 -1
- data/lib/foreman_openscap/engine.rb +34 -9
- data/lib/foreman_openscap/version.rb +1 -1
- metadata +25 -5
- data/app/controllers/arf_reports_controller.rb +0 -23
- data/app/views/arf_reports/_list.html.erb +0 -18
- data/app/views/arf_reports/index.html.erb +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9099dd74d7cf2f5a4d208da949f2985b7e439b68
|
4
|
+
data.tar.gz: 86e35c42bd3592cd233cde1edb2e07447027f1d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 36ddf368e83db6d1f6b155cbe63cd07addfa3bd48a302020878e9f02460b224753e9a26cbb077ed9a26031be89a1b2dbbf69cf45d216c575e4f8fb97d9c62f28
|
7
|
+
data.tar.gz: b5224b0a227ba97923cc6aed1e550a5e28bc291b2b11a70822585dcf5b3c2db1287cee865b60b884c7b1fa625f55f23566d5ad7d3570fcaaf02a19bfbc0cd243
|
data/README.md
CHANGED
@@ -4,17 +4,21 @@ This plug-in enables automated vulnerability assessment and compliance audit
|
|
4
4
|
of Foreman based infrastructure.
|
5
5
|
|
6
6
|
+ Current features:
|
7
|
+
+ Centralized policy management
|
7
8
|
+ Collect & achieve OpenSCAP audit results from your infrastructure
|
8
|
-
+ Future features:
|
9
9
|
+ Display audit results
|
10
|
-
+ Set-up organization defined targeting (connect set of system, a policy and time schedule)
|
11
|
-
+ Set-up periodical audits
|
12
10
|
+ Search audit results
|
13
11
|
+ Search for non-compliant systems
|
12
|
+
+ Future features:
|
13
|
+
+ Set-up organization defined targeting (connect set of system, a policy and time schedule)
|
14
|
+
+ Set-up periodical audits
|
14
15
|
+ Search for not audited systems
|
15
16
|
+ Comparison of audit results
|
16
17
|
+ Waive known issues (one-time waivers, re-occurring, waivers)
|
17
18
|
+ Ad-hoc audit of given machine
|
19
|
+
+ Support for PreupgradeAssistant evaluation
|
20
|
+
+ Vulnerability Assessment (processing OVAL CVE streams)
|
21
|
+
+ E-mail notifications
|
18
22
|
|
19
23
|
## Installation
|
20
24
|
|
@@ -0,0 +1,14 @@
|
|
1
|
+
function scap_content_selected(element){
|
2
|
+
var attrs = attribute_hash(['scap_content_id']);
|
3
|
+
var url = $(element).attr('data-url');
|
4
|
+
$(element).indicator_show();
|
5
|
+
$.ajax({
|
6
|
+
data: attrs,
|
7
|
+
type: 'post',
|
8
|
+
url: url,
|
9
|
+
complete: function() { $(element).indicator_hide();},
|
10
|
+
success: function(request) {
|
11
|
+
$('#scap_content_profile_select').html(request);
|
12
|
+
}
|
13
|
+
})
|
14
|
+
}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
class ScaptimonyArfReportsController < ApplicationController
|
2
|
+
include Foreman::Controller::AutoCompleteSearch
|
3
|
+
|
4
|
+
before_filter :find_by_id, :only => [:show, :destroy]
|
5
|
+
|
6
|
+
def model_of_controller
|
7
|
+
::Scaptimony::ArfReport
|
8
|
+
end
|
9
|
+
|
10
|
+
# GET /scaptimony/arf_reports
|
11
|
+
def index
|
12
|
+
@arf_reports = resource_base.search_for(params[:search], :order => params[:order]).paginate(:page => params[:page], :per_page => params[:per_page])
|
13
|
+
end
|
14
|
+
|
15
|
+
# GET /scaptimony/arf_reports/1
|
16
|
+
def show
|
17
|
+
self.response_body = @arf_report
|
18
|
+
end
|
19
|
+
|
20
|
+
def destroy
|
21
|
+
if @arf_report.destroy
|
22
|
+
process_success :success_redirect => scaptimony_arf_reports_path
|
23
|
+
else
|
24
|
+
process_error
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def find_by_id
|
29
|
+
@arf_report = resource_base.find(params[:id])
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
class ScaptimonyPoliciesController < ApplicationController
|
2
|
+
include Foreman::Controller::AutoCompleteSearch
|
3
|
+
before_filter :find_by_id, :only => [:show, :edit, :update, :destroy]
|
4
|
+
|
5
|
+
def model_of_controller
|
6
|
+
::Scaptimony::Policy
|
7
|
+
end
|
8
|
+
|
9
|
+
# GET /scaptimony/policies
|
10
|
+
def index
|
11
|
+
@policies = resource_base.search_for(params[:search])
|
12
|
+
end
|
13
|
+
|
14
|
+
def new
|
15
|
+
@policy = ::Scaptimony::Policy.new
|
16
|
+
end
|
17
|
+
|
18
|
+
def show
|
19
|
+
self.response_body = ::Scaptimony::GuideGenerator.new @policy
|
20
|
+
end
|
21
|
+
|
22
|
+
def create
|
23
|
+
@policy = ::Scaptimony::Policy.new(params[:policy])
|
24
|
+
if @policy.save
|
25
|
+
process_success :success_redirect => scaptimony_policies_path
|
26
|
+
else
|
27
|
+
process_error
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def update
|
32
|
+
if @policy.update_attributes(params[:policy])
|
33
|
+
process_success :success_redirect => scaptimony_policies_path
|
34
|
+
else
|
35
|
+
process_error
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def destroy
|
40
|
+
if @policy.destroy
|
41
|
+
process_success :success_redirect => scaptimony_policies_path
|
42
|
+
else
|
43
|
+
process_error
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def scap_content_selected
|
48
|
+
if params[:scap_content_id] and @scap_content = ::Scaptimony::ScapContent.find(params[:scap_content_id])
|
49
|
+
@policy ||= ::Scaptimony::Policy.new
|
50
|
+
render :partial => 'scap_content_results', :locals => { :policy => @policy }
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
def find_by_id
|
56
|
+
@policy = resource_base.find(params[:id])
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
class ScaptimonyScapContentsController < ApplicationController
|
2
|
+
include Foreman::Controller::AutoCompleteSearch
|
3
|
+
before_filter :handle_file_upload, :only => [:create]
|
4
|
+
before_filter :find_by_id, :only => [:show, :edit, :update]
|
5
|
+
|
6
|
+
def model_of_controller
|
7
|
+
::Scaptimony::ScapContent
|
8
|
+
end
|
9
|
+
|
10
|
+
# GET /scaptimony/scap_contents
|
11
|
+
def index
|
12
|
+
@contents = resource_base.search_for(params[:search])
|
13
|
+
end
|
14
|
+
|
15
|
+
def show
|
16
|
+
send_file @scaptimony_scap_content.path,
|
17
|
+
:type => "application/xml",
|
18
|
+
:filename => @scaptimony_scap_content.original_filename
|
19
|
+
end
|
20
|
+
|
21
|
+
def new
|
22
|
+
@scaptimony_scap_content = ::Scaptimony::ScapContent.new
|
23
|
+
end
|
24
|
+
|
25
|
+
# POST /scaptimony/scap_contents
|
26
|
+
def create
|
27
|
+
@scaptimony_scap_content = ::Scaptimony::ScapContent.new(params[:scap_content])
|
28
|
+
if @scaptimony_scap_content.store
|
29
|
+
process_success :success_redirect => scaptimony_scap_contents_path
|
30
|
+
else
|
31
|
+
process_error
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def handle_file_upload
|
36
|
+
return unless params[:scap_content] and
|
37
|
+
t = params[:scap_content][:scap_file]
|
38
|
+
params[:scap_content][:original_filename] = t.original_filename
|
39
|
+
params[:scap_content][:scap_file] = t.read if t.respond_to?(:read)
|
40
|
+
end
|
41
|
+
|
42
|
+
def update
|
43
|
+
if @scaptimony_scap_content.update_attributes(params[:scap_content])
|
44
|
+
process_success :success_redirect => scaptimony_scap_contents_path
|
45
|
+
else
|
46
|
+
process_error
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
def find_by_id
|
52
|
+
@scaptimony_scap_content = resource_base.find(params[:id])
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2014 Red Hat Inc.
|
3
|
+
#
|
4
|
+
# This software is licensed to you under the GNU General Public License,
|
5
|
+
# version 3 (GPLv3). There is NO WARRANTY for this software, express or
|
6
|
+
# implied, including the implied warranties of MERCHANTABILITY or FITNESS
|
7
|
+
# FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv3
|
8
|
+
# along with this software; if not, see http://www.gnu.org/licenses/gpl.txt
|
9
|
+
#
|
10
|
+
|
11
|
+
module ArfReportsHelper
|
12
|
+
def report_arf_column(event, style = "")
|
13
|
+
style = "label-default" if event == 0
|
14
|
+
content_tag(:span, event, :class=>'label ' + style)
|
15
|
+
end
|
16
|
+
end
|
@@ -14,8 +14,7 @@ module ForemanOpenscap
|
|
14
14
|
module ArfReportExtensions
|
15
15
|
extend ActiveSupport::Concern
|
16
16
|
included do
|
17
|
-
scoped_search :on => :
|
18
|
-
scoped_search :on => :digest
|
17
|
+
scoped_search :in => :asset, :on => :name, :complete_value => :true, :rename => "host"
|
19
18
|
end
|
20
19
|
end
|
21
20
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2014 Red Hat Inc.
|
3
|
+
#
|
4
|
+
# This software is licensed to you under the GNU General Public License,
|
5
|
+
# version 3 (GPLv3). There is NO WARRANTY for this software, express or
|
6
|
+
# implied, including the implied warranties of MERCHANTABILITY or FITNESS
|
7
|
+
# FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv3
|
8
|
+
# along with this software; if not, see http://www.gnu.org/licenses/gpl.txt
|
9
|
+
#
|
10
|
+
|
11
|
+
require 'scaptimony/policy'
|
12
|
+
|
13
|
+
module ForemanOpenscap
|
14
|
+
module PolicyExtensions
|
15
|
+
extend ActiveSupport::Concern
|
16
|
+
included do
|
17
|
+
scoped_search :on => :name, :complete_value => true
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2014 Red Hat Inc.
|
3
|
+
#
|
4
|
+
# This software is licensed to you under the GNU General Public License,
|
5
|
+
# version 3 (GPLv3). There is NO WARRANTY for this software, express or
|
6
|
+
# implied, including the implied warranties of MERCHANTABILITY or FITNESS
|
7
|
+
# FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv3
|
8
|
+
# along with this software; if not, see http://www.gnu.org/licenses/gpl.txt
|
9
|
+
#
|
10
|
+
|
11
|
+
require 'scaptimony/scap_content'
|
12
|
+
|
13
|
+
module ForemanOpenscap
|
14
|
+
module ScapContentExtensions
|
15
|
+
extend ActiveSupport::Concern
|
16
|
+
included do
|
17
|
+
scoped_search :on => :digest
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<table class="table table-bordered table-striped ellipsis">
|
2
|
+
<tr>
|
3
|
+
<th><%= sort :host %></th>
|
4
|
+
<th><%= sort :date, :as => _("Date") %></th>
|
5
|
+
<th><%= sort :passed, :as => _("Passed") %></th>
|
6
|
+
<th><%= sort :failed, :as => _("Failed") %></th>
|
7
|
+
<th><%= sort :othered, :as => _("Other") %></th>
|
8
|
+
<th></th>
|
9
|
+
</tr>
|
10
|
+
<% for arf_report in @arf_reports %>
|
11
|
+
<tr>
|
12
|
+
<td><%= name_column(arf_report.asset.host) %></td>
|
13
|
+
<td><%= _("%s ago") % time_ago_in_words(arf_report.date.getlocal) %></td>
|
14
|
+
<td><%= report_arf_column(arf_report.passed, "label-info") %></th>
|
15
|
+
<td><%= report_arf_column(arf_report.failed, "label-danger") %></th>
|
16
|
+
<td><%= report_arf_column(arf_report.othered, "label-warning") %></th>
|
17
|
+
<td>
|
18
|
+
<%= action_buttons(
|
19
|
+
link_to(_("View Report"), hash_for_scaptimony_arf_report_path(:id => arf_report.id)),
|
20
|
+
display_delete_if_authorized(hash_for_scaptimony_arf_report_path(:id => arf_report.id),
|
21
|
+
:confirm => _("Delete compliance report for %s?") % arf_report.asset.host)
|
22
|
+
) %>
|
23
|
+
</td>
|
24
|
+
</tr>
|
25
|
+
<% end %>
|
26
|
+
</table>
|
27
|
+
<%= will_paginate_with_info @arf_reports %>
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<%= javascript 'policy_edit' %>
|
2
|
+
<%= form_for @policy,
|
3
|
+
:url => (@policy.id? ? scaptimony_policy_path(:id => @policy.id) : scaptimony_policies_path) do |f| %>
|
4
|
+
<%= base_errors_for @policy %>
|
5
|
+
|
6
|
+
<ul class="nav nav-tabs" data-tabs="tabs">
|
7
|
+
<li class="active"><a href="#primary" data-toggle="tab"><%= _("General") %></a></li>
|
8
|
+
<li><a href="#scap_content" data-toggle="tab"><%= _("SCAP Content") %></a></li>
|
9
|
+
<li><a href="#scap_schedule" data-toggle="tab"><%= _("Schedule") %></a></li>
|
10
|
+
</ul>
|
11
|
+
<div class="tab-content">
|
12
|
+
<div class="tab-pane active" id="primary">
|
13
|
+
<%= text_f(f, :name) %>
|
14
|
+
<%= text_f(f, :description, :size => "col-md-8" ) %>
|
15
|
+
</div>
|
16
|
+
<div class="tab-pane" id="scap_content">
|
17
|
+
<%= select_f f, :scap_content_id, Scaptimony::ScapContent.all, :id, :title,
|
18
|
+
{:include_blank => _("Choose existing SCAP Content")},
|
19
|
+
{:label => _("SCAP Content"),
|
20
|
+
:onchange => 'scap_content_selected(this);',
|
21
|
+
:'data-url' => method_path('scap_content_selected')}
|
22
|
+
%>
|
23
|
+
<span id="scap_content_profile_select">
|
24
|
+
<%= select_f f, :scap_content_profile_id, profiles_selection, :id, :title,
|
25
|
+
{:selected => @policy.scap_content_profile_id,
|
26
|
+
:include_blank => _("Default XCCDF profile")},
|
27
|
+
{:label => _("XCCDF Profile"),
|
28
|
+
:disabled => profiles_selection.empty? ? true : false,
|
29
|
+
:help_inline => :indicator}
|
30
|
+
%>
|
31
|
+
</span>
|
32
|
+
</div>
|
33
|
+
<div class="tab-pane" id="scap_schedule">
|
34
|
+
<%= text_f(f, :period) %>
|
35
|
+
<%= text_f(f, :weekday) %>
|
36
|
+
</div>
|
37
|
+
<%= submit_or_cancel f %>
|
38
|
+
</div>
|
39
|
+
<% end %>
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<table class="table table-bordered table-striped table-two-pane">
|
2
|
+
<tr>
|
3
|
+
<th>Name</th>
|
4
|
+
<th>Content</th>
|
5
|
+
<th>Profile</th>
|
6
|
+
<th></th>
|
7
|
+
</tr>
|
8
|
+
<% for policy in @policies %>
|
9
|
+
<tr>
|
10
|
+
<td>
|
11
|
+
<%= link_to_if_authorized policy.name,
|
12
|
+
hash_for_edit_scaptimony_policy_path(:id => policy).merge(
|
13
|
+
:auth_object => policy, :authorizer => authorizer) %>
|
14
|
+
</td>
|
15
|
+
<td>
|
16
|
+
<% if !policy.scap_content.nil? %>
|
17
|
+
<%= link_to_if_authorized policy.scap_content.title,
|
18
|
+
hash_for_edit_scaptimony_scap_content_path(:id => policy.scap_content) %>
|
19
|
+
<% end %>
|
20
|
+
</td>
|
21
|
+
<td>
|
22
|
+
<%= policy.scap_content_profile.nil? ? "Default" : policy.scap_content_profile.title %>
|
23
|
+
</td>
|
24
|
+
<td>
|
25
|
+
<%= action_buttons(
|
26
|
+
link_to_if_authorized(_("Show Guide"), hash_for_scaptimony_policy_path(:id => policy.id)),
|
27
|
+
link_to_if_authorized(_("Edit"), hash_for_edit_scaptimony_policy_path(:id => policy.id)),
|
28
|
+
display_delete_if_authorized(hash_for_scaptimony_policy_path(:id => policy.id),
|
29
|
+
:confirm => _("Delete compliance policy %s with all the reports?") % policy.name)
|
30
|
+
) %>
|
31
|
+
</td>
|
32
|
+
</tr>
|
33
|
+
<% end %>
|
34
|
+
</table>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<%= fields_for @policy do |f| %>
|
2
|
+
<%= select_f f, :scap_content_profile_id, profiles_selection, :id, :title,
|
3
|
+
{:selected => @policy.scap_content_profile_id,
|
4
|
+
:include_blank => _("Default XCCDF profile")},
|
5
|
+
{:label => _("XCCDF Profile"),
|
6
|
+
:disabled => profiles_selection.empty? ? true : false,
|
7
|
+
:help_inline => :indicator}
|
8
|
+
%>
|
9
|
+
<% end %>
|
10
|
+
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<%= javascript 'policy_edit' %>
|
2
|
+
<% title _("Compliance Policies") %>
|
3
|
+
|
4
|
+
<% title_actions(
|
5
|
+
display_link_if_authorized(_("New Compliance Policy"), hash_for_new_scaptimony_policy_path),
|
6
|
+
link_to(_("Help"), :action => "welcome")
|
7
|
+
) %>
|
8
|
+
|
9
|
+
<%= render :partial => 'list' %>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<% title_actions display_link_if_authorized(_("New Compliance policy"), hash_for_new_scaptimony_policy_path) %>
|
2
|
+
|
3
|
+
<% title _("Compliance policy configuration") %>
|
4
|
+
<div id="welcome">
|
5
|
+
<p>
|
6
|
+
<%= _('A compliance policy is defined by security professionals who specify desired settings (often in the form of a checklist) that are to be used in the computing environment. Compliance audit is a process of figuring out whether a given object follows all the rules written out in a compliance policy.') %>
|
7
|
+
|
8
|
+
<%= _('In order to define compliance policy, you need to prepare checklist (SCAP content), list of systems and time schedule') %>
|
9
|
+
</p>
|
10
|
+
</div>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<%= form_for @scaptimony_scap_content,
|
2
|
+
:url => (@scaptimony_scap_content.id? ?
|
3
|
+
scaptimony_scap_content_path(:id => @scaptimony_scap_content.id) : scaptimony_scap_contents_path),
|
4
|
+
:html => { :multipart => true } do |f| %>
|
5
|
+
|
6
|
+
<%= base_errors_for @scaptimony_scap_content %>
|
7
|
+
|
8
|
+
<ul class="nav nav-tabs" data-tabs="tabs">
|
9
|
+
<li class="active"><a href="#primary" data-toggle="tab"><%= _("File Upload") %></a></li>
|
10
|
+
</ul>
|
11
|
+
<div class="tab-content">
|
12
|
+
<div class="tab-pane active" id="primary">
|
13
|
+
<%= text_f(f, :title) %>
|
14
|
+
<%= file_field_f f, :scap_file, :help_block => _("Upload SCAP DataStream file") %>
|
15
|
+
</div>
|
16
|
+
<%= submit_or_cancel f %>
|
17
|
+
</div>
|
18
|
+
<% end %>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<table class="table table-bordered table-striped table-two-pane">
|
2
|
+
<tr>
|
3
|
+
<th>Title</th>
|
4
|
+
<th>Filename</th>
|
5
|
+
<th>Created</th>
|
6
|
+
<th></th>
|
7
|
+
</tr>
|
8
|
+
<% for c in @contents %>
|
9
|
+
<tr>
|
10
|
+
<td>
|
11
|
+
<%= c.title %>
|
12
|
+
</td>
|
13
|
+
<td>
|
14
|
+
<%= c.original_filename %>
|
15
|
+
</td>
|
16
|
+
<td>
|
17
|
+
<%= _("%s ago") % time_ago_in_words(c.created_at.getlocal) %>
|
18
|
+
</td>
|
19
|
+
<td>
|
20
|
+
<%= action_buttons(
|
21
|
+
link_to_if_authorized(_("Edit"), hash_for_edit_scaptimony_scap_content_path(:id => c.id)),
|
22
|
+
link_to_if_authorized(_("Download"), hash_for_scaptimony_scap_content_path(:id => c.id))
|
23
|
+
) %>
|
24
|
+
</td>
|
25
|
+
</tr>
|
26
|
+
<% end %>
|
27
|
+
</table>
|
data/config/routes.rb
CHANGED
@@ -1,6 +1,17 @@
|
|
1
1
|
Rails.application.routes.draw do
|
2
2
|
|
3
|
-
|
3
|
+
scope '/scaptimony' do
|
4
|
+
resources :arf_reports, :only => [:index, :show, :destroy],
|
5
|
+
:as => :scaptimony_arf_reports, :controller => :scaptimony_arf_reports
|
6
|
+
match 'dashboard', :to => 'scaptimony_dashboard#index', :as => "scaptimony_dashboard"
|
7
|
+
resources :policies, :only => [:index, :new, :show, :create, :edit, :update, :destroy],
|
8
|
+
:as => :scaptimony_policies, :controller => :scaptimony_policies do
|
9
|
+
collection do
|
10
|
+
post 'scap_content_selected'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
resources :scap_contents, :only => [:index, :show, :new, :create, :edit, :update],
|
14
|
+
:as => :scaptimony_scap_contents, :controller => :scaptimony_scap_contents
|
4
15
|
end
|
5
16
|
|
6
17
|
namespace :api do
|
@@ -15,24 +15,47 @@ module ForemanOpenscap
|
|
15
15
|
app.config.paths['db/migrate'] += ForemanOpenscap::Engine.paths['db/migrate'].existent
|
16
16
|
end
|
17
17
|
|
18
|
+
initializer 'foreman_openscap.assets.precompile' do |app|
|
19
|
+
app.config.assets.precompile += %w(
|
20
|
+
'foreman_openscap/policy_edit.js'
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
initializer 'foreman_openscap.configure_assets', :group => :assets do
|
25
|
+
SETTINGS[:foreman_openscap] =
|
26
|
+
{ :assets => { :precompile => ['foreman_openscap/policy_edit.js']}}
|
27
|
+
end
|
28
|
+
|
18
29
|
initializer 'foreman_openscap.register_plugin', :after=> :finisher_hook do |app|
|
19
30
|
Foreman::Plugin.register :foreman_openscap do
|
20
31
|
requires_foreman '>= 1.5'
|
21
32
|
|
22
33
|
# Add permissions
|
23
34
|
security_block :foreman_openscap do
|
24
|
-
permission :view_arf_reports, {:
|
35
|
+
permission :view_arf_reports, {:scaptimony_arf_reports => [:index, :show],
|
36
|
+
:scaptimony_policies => [:index, :show],
|
37
|
+
:scaptimony_scap_contents => [:index, :show],
|
38
|
+
}
|
39
|
+
permission :edit_compliance, {:scaptimony_arf_reports => [:destroy],
|
40
|
+
:scaptimony_policies => [:new, :create, :edit, :update, :destroy],
|
41
|
+
:scaptimony_scap_contents => [:new, :create, :edit, :update]
|
42
|
+
}
|
25
43
|
end
|
26
44
|
|
27
|
-
|
28
|
-
role "
|
45
|
+
role "View compliance reports", [:view_arf_reports]
|
46
|
+
role "Edit compliance policies", [:edit_compliance]
|
29
47
|
|
30
|
-
#add menu
|
31
|
-
|
32
|
-
|
33
|
-
:
|
34
|
-
:parent
|
35
|
-
|
48
|
+
#add menu entries
|
49
|
+
divider :top_menu, :caption => N_('Compliance'), :parent => :hosts_menu
|
50
|
+
menu :top_menu, :compliance_policies, :caption => N_('Policies'),
|
51
|
+
:url_hash => {:controller => :'scaptimony_policies', :action => :index },
|
52
|
+
:parent => :hosts_menu
|
53
|
+
menu :top_menu, :compliance_contents, :caption => N_('SCAP contents'),
|
54
|
+
:url_hash => {:controller => :'scaptimony_scap_contents', :action => :index },
|
55
|
+
:parent => :hosts_menu
|
56
|
+
menu :top_menu, :compliance_reports, :caption => N_('Reports'),
|
57
|
+
:url_hash => {:controller => :'scaptimony_arf_reports', :action => :index },
|
58
|
+
:parent => :hosts_menu
|
36
59
|
end
|
37
60
|
end
|
38
61
|
|
@@ -42,6 +65,8 @@ module ForemanOpenscap
|
|
42
65
|
Host::Managed.send(:include, ForemanOpenscap::HostExtensions)
|
43
66
|
HostsHelper.send(:include, ForemanOpenscap::HostsHelperExtensions)
|
44
67
|
::Scaptimony::ArfReport.send(:include, ForemanOpenscap::ArfReportExtensions)
|
68
|
+
::Scaptimony::Policy.send(:include, ForemanOpenscap::PolicyExtensions)
|
69
|
+
::Scaptimony::ScapContent.send(:include, ForemanOpenscap::ScapContentExtensions)
|
45
70
|
rescue => e
|
46
71
|
puts "ForemanOpenscap: skipping engine hook (#{e.to_s})"
|
47
72
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_openscap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Šimon Lukašík
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: deface
|
@@ -31,14 +31,34 @@ executables: []
|
|
31
31
|
extensions: []
|
32
32
|
extra_rdoc_files: []
|
33
33
|
files:
|
34
|
-
- app/views/
|
35
|
-
- app/views/
|
34
|
+
- app/views/scaptimony_arf_reports/index.html.erb
|
35
|
+
- app/views/scaptimony_arf_reports/_list.html.erb
|
36
|
+
- app/views/scaptimony_scap_contents/_form.html.erb
|
37
|
+
- app/views/scaptimony_scap_contents/new.html.erb
|
38
|
+
- app/views/scaptimony_scap_contents/index.html.erb
|
39
|
+
- app/views/scaptimony_scap_contents/_list.html.erb
|
40
|
+
- app/views/scaptimony_scap_contents/edit.html.erb
|
41
|
+
- app/views/scaptimony_policies/welcome.html.erb
|
42
|
+
- app/views/scaptimony_policies/_form.html.erb
|
43
|
+
- app/views/scaptimony_policies/new.html.erb
|
44
|
+
- app/views/scaptimony_policies/index.html.erb
|
45
|
+
- app/views/scaptimony_policies/_list.html.erb
|
46
|
+
- app/views/scaptimony_policies/_scap_content_results.html.erb
|
47
|
+
- app/views/scaptimony_policies/edit.html.erb
|
36
48
|
- app/overrides/dashboard/index/sample_override.html.erb.deface
|
49
|
+
- app/helpers/scaptimony_policies_helper.rb
|
37
50
|
- app/helpers/concerns/foreman_openscap/hosts_helper_extensions.rb
|
38
|
-
- app/
|
51
|
+
- app/helpers/arf_reports_helper.rb
|
52
|
+
- app/controllers/scaptimony_policies_controller.rb
|
53
|
+
- app/controllers/scaptimony_scap_contents_controller.rb
|
39
54
|
- app/controllers/api/v2/openscap/arf_reports_controller.rb
|
55
|
+
- app/controllers/scaptimony_dashboard_controller.rb
|
56
|
+
- app/controllers/scaptimony_arf_reports_controller.rb
|
57
|
+
- app/assets/javascript/policy_edit.js
|
40
58
|
- app/models/concerns/foreman_openscap/arf_report_extensions.rb
|
41
59
|
- app/models/concerns/foreman_openscap/host_extensions.rb
|
60
|
+
- app/models/concerns/foreman_openscap/policy_extensions.rb
|
61
|
+
- app/models/concerns/foreman_openscap/scap_content_extensions.rb
|
42
62
|
- app/models/scaptimony/asset.rb
|
43
63
|
- config/routes.rb
|
44
64
|
- db/migrate/20141017172055_create_scaptimony_auditable_hosts.rb
|
@@ -1,23 +0,0 @@
|
|
1
|
-
class ArfReportsController < ApplicationController
|
2
|
-
include Foreman::Controller::AutoCompleteSearch
|
3
|
-
|
4
|
-
before_filter :find_by_id, :only => [:show]
|
5
|
-
|
6
|
-
def model_of_controller
|
7
|
-
::Scaptimony::ArfReport
|
8
|
-
end
|
9
|
-
|
10
|
-
# GET /arf_reports
|
11
|
-
def index
|
12
|
-
@arf_reports = resource_base.search_for(params[:search])
|
13
|
-
end
|
14
|
-
|
15
|
-
# GET /arf_reports/1
|
16
|
-
def show
|
17
|
-
self.response_body = @arf_report
|
18
|
-
end
|
19
|
-
|
20
|
-
def find_by_id
|
21
|
-
@arf_report = resource_base.find(params[:id])
|
22
|
-
end
|
23
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
<table class="table table-bordered table-striped ellipsis">
|
2
|
-
<tr>
|
3
|
-
<th><%= sort :host %></th>
|
4
|
-
<th><%= sort :policy, :as => _("Policy") %></th>
|
5
|
-
<th><%= sort :date, :as => _("Date") %></th>
|
6
|
-
<th></th>
|
7
|
-
</tr>
|
8
|
-
<% for arf_report in @arf_reports %>
|
9
|
-
<tr>
|
10
|
-
<td><%= name_column(arf_report.asset.host) %></td>
|
11
|
-
<td><%= arf_report.policy.name %></td>
|
12
|
-
<td><%= _("%s ago") % time_ago_in_words(arf_report.date.getlocal) %></td>
|
13
|
-
<td>
|
14
|
-
<%= action_buttons( link_to(_("View Report"), hash_for_arf_report_path(:id => arf_report.id))) %>
|
15
|
-
</td>
|
16
|
-
</tr>
|
17
|
-
<% end %>
|
18
|
-
</table>
|