foreman_openscap 0.11.1 → 0.11.2
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/app/controllers/api/v2/compliance/arf_reports_controller.rb +20 -5
- data/app/models/foreman_openscap/arf_report.rb +9 -8
- data/lib/foreman_openscap/helper.rb +2 -7
- data/lib/foreman_openscap/version.rb +1 -1
- data/test/functional/api/v2/compliance/arf_reports_controller_test.rb +35 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 416e356bc2870ed24cb951ba6dcd4d82b8a5ccb3
|
4
|
+
data.tar.gz: 53fc14379e71a0ff3ce51711a71974b33993c01d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 94376bb05a0efba455dbd86ee1044e065b357e43f76572ed78659056128da0c1f2a4cb5be0b241a0372d4d87cddc27665566f170a731adcc223807da8deab881
|
7
|
+
data.tar.gz: 36ed74e3c3df1e3d46b47827c2af362c1a7744b5fdc7ec639713f56eace072994f64125a40bd6c141fa2261d1e999208a42a2b1750bcdc8e5b77559430f29480
|
@@ -50,7 +50,7 @@ module Api
|
|
50
50
|
def create
|
51
51
|
arf_report = ForemanOpenscap::ArfReport.create_arf(@asset, @smart_proxy, params.to_unsafe_h)
|
52
52
|
@asset.host.refresh_statuses([HostStatus.find_status_by_humanized_name("compliance")])
|
53
|
-
|
53
|
+
respond_for_report arf_report
|
54
54
|
end
|
55
55
|
|
56
56
|
api :GET, "/compliance/arf_reports/:id/download/", N_("Download bzipped ARF report")
|
@@ -75,6 +75,16 @@ module Api
|
|
75
75
|
|
76
76
|
private
|
77
77
|
|
78
|
+
def respond_for_report(arf_report)
|
79
|
+
if arf_report.nil?
|
80
|
+
upload_fail(_("Policy with id %s not found.") % params[:policy_id])
|
81
|
+
elsif arf_report.new_record?
|
82
|
+
upload_fail arf_report.errors.full_messages.to_sentence
|
83
|
+
else
|
84
|
+
render :json => { :result => :ok, :id => arf_report.id.to_s }
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
78
88
|
def find_resource
|
79
89
|
not_found && return if params[:id].blank?
|
80
90
|
instance_variable_set("@arf_report", resource_scope.find(params[:id]))
|
@@ -83,9 +93,14 @@ module Api
|
|
83
93
|
def find_resources_before_create
|
84
94
|
@asset = ForemanOpenscap::Helper::get_asset(params[:cname], params[:policy_id])
|
85
95
|
|
96
|
+
unless @asset
|
97
|
+
upload_fail(_('Could not find host identified by: %s') % params[:cname])
|
98
|
+
return
|
99
|
+
end
|
100
|
+
|
86
101
|
if !params[:openscap_proxy_url] && !params[:openscap_proxy_name] && !@asset.host.openscap_proxy
|
87
102
|
msg = _('Failed to upload Arf Report, OpenSCAP proxy name or url not found in params when uploading for %s and host is missing openscap_proxy') % @asset.host.name
|
88
|
-
|
103
|
+
upload_fail(msg)
|
89
104
|
return
|
90
105
|
elsif !params[:openscap_proxy_url] && !params[:openscap_proxy_name] && @asset.host.openscap_proxy
|
91
106
|
logger.debug 'No proxy params found when uploading arf report, falling back to asset.host.openscap_proxy'
|
@@ -97,7 +112,7 @@ module Api
|
|
97
112
|
|
98
113
|
unless @smart_proxy
|
99
114
|
msg = _('No proxy found for %{name} or %{url}') % { :name => params[:openscap_proxy_name], :url => params[:openscap_proxy_url] }
|
100
|
-
|
115
|
+
upload_fail(msg)
|
101
116
|
return
|
102
117
|
end
|
103
118
|
end
|
@@ -106,9 +121,9 @@ module Api
|
|
106
121
|
render_error 'standard_error', :status => :internal_error, :locals => { :exception => error }
|
107
122
|
end
|
108
123
|
|
109
|
-
def
|
124
|
+
def upload_fail(msg)
|
110
125
|
logger.error msg
|
111
|
-
render :json => { :result => msg }, :status => :unprocessable_entity
|
126
|
+
render :json => { :result => :fail, :errors => msg }, :status => :unprocessable_entity
|
112
127
|
end
|
113
128
|
|
114
129
|
def action_permission
|
@@ -105,16 +105,17 @@ module ForemanOpenscap
|
|
105
105
|
end
|
106
106
|
|
107
107
|
def self.create_arf(asset, proxy, params)
|
108
|
-
# fail if policy does not exist.
|
109
108
|
arf_report = nil
|
110
|
-
policy = Policy.
|
109
|
+
policy = Policy.find_by :id => params[:policy_id]
|
110
|
+
return unless policy
|
111
|
+
|
111
112
|
ArfReport.transaction do
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
113
|
+
arf_report = ArfReport.create(:host => asset.host,
|
114
|
+
:reported_at => Time.at(params[:date].to_i),
|
115
|
+
:status => params[:metrics],
|
116
|
+
:metrics => params[:metrics],
|
117
|
+
:openscap_proxy => proxy)
|
118
|
+
return arf_report unless arf_report.persisted?
|
118
119
|
PolicyArfReport.where(:arf_report_id => arf_report.id, :policy_id => policy.id, :digest => params[:digest]).first_or_create!
|
119
120
|
if params[:logs]
|
120
121
|
params[:logs].each do |log|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module ForemanOpenscap::Helper
|
2
2
|
def self.get_asset(cname, policy_id)
|
3
|
-
asset = find_host_by_name_or_uuid(cname)
|
3
|
+
asset = find_host_by_name_or_uuid(cname)&.get_asset
|
4
|
+
return unless asset
|
4
5
|
asset.policy_ids += [policy_id]
|
5
6
|
asset
|
6
7
|
end
|
@@ -16,11 +17,5 @@ module ForemanOpenscap::Helper
|
|
16
17
|
else
|
17
18
|
host = Host.find_by(name: cname)
|
18
19
|
end
|
19
|
-
|
20
|
-
unless host
|
21
|
-
Rails.logger.error "Could not find Host with name: #{cname}"
|
22
|
-
raise ActiveRecord::RecordNotFound
|
23
|
-
end
|
24
|
-
host
|
25
20
|
end
|
26
21
|
end
|
@@ -90,7 +90,41 @@ class Api::V2::Compliance::ArfReportsControllerTest < ActionController::TestCase
|
|
90
90
|
assert_response :unprocessable_entity
|
91
91
|
res = JSON.parse(@response.body)
|
92
92
|
msg = "Failed to upload Arf Report, OpenSCAP proxy name or url not found in params when uploading for #{asset.host.name} and host is missing openscap_proxy"
|
93
|
-
assert_equal msg, res["
|
93
|
+
assert_equal msg, res["errors"]
|
94
|
+
end
|
95
|
+
|
96
|
+
test "should not create report when host is missing" do
|
97
|
+
reports_cleanup
|
98
|
+
date = Time.new(1984, 9, 16)
|
99
|
+
ForemanOpenscap::Helper.stubs(:get_asset).returns(nil)
|
100
|
+
cname = '9521a5c5-8f44-495f-b087-20e86b30bffg'
|
101
|
+
post :create,
|
102
|
+
:params => @from_json.merge(:cname => cname,
|
103
|
+
:policy_id => @policy.id,
|
104
|
+
:date => date.to_i,
|
105
|
+
:openscap_proxy_name => @proxy.name),
|
106
|
+
:session => set_session_user
|
107
|
+
assert_response :unprocessable_entity
|
108
|
+
res = JSON.parse(@response.body)
|
109
|
+
msg = "Could not find host identified by: #{cname}"
|
110
|
+
assert_equal msg, res["errors"]
|
111
|
+
end
|
112
|
+
|
113
|
+
test "should not create report when policy is missing" do
|
114
|
+
reports_cleanup
|
115
|
+
date = Time.new(1984, 9, 17)
|
116
|
+
ForemanOpenscap::Helper.stubs(:get_asset).returns(@asset)
|
117
|
+
policy_id = 0
|
118
|
+
post :create,
|
119
|
+
:params => @from_json.merge(:cname => @cname,
|
120
|
+
:policy_id => policy_id,
|
121
|
+
:date => date.to_i,
|
122
|
+
:openscap_proxy_name => @proxy.name),
|
123
|
+
:session => set_session_user
|
124
|
+
assert_response :unprocessable_entity
|
125
|
+
res = JSON.parse(@response.body)
|
126
|
+
msg = "Policy with id #{policy_id} not found."
|
127
|
+
assert_equal msg, res["errors"]
|
94
128
|
end
|
95
129
|
|
96
130
|
test "should not duplicate messages" do
|
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.11.
|
4
|
+
version: 0.11.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- slukasik@redhat.com
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-11-
|
11
|
+
date: 2018-11-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: deface
|