smart_proxy_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 CHANGED
@@ -1,7 +1,7 @@
1
- ---
2
- SHA1:
3
- metadata.gz: a3045f38873e1f2bcde54bde9421175602bb9f34
4
- data.tar.gz: 24414ceac6a0c7d5a3462d2de1ab11e6a45f5806
5
- SHA512:
6
- metadata.gz: d1cceeb3e1ed7a8e469fafef6f703a89db4352d22d6f765dd6455fea2ed097addd0bee56c08495b210b78039d2960e715e0c08d547c95c3cf6584dca7072db90
7
- data.tar.gz: 498837268ecc6d1c12bdf4906fda81ade22b1846358acc84a5813dd7e3242d5086805cda2b637b417cee04d47fcc48fbcbb6344499dcfca31dd954d102fa1a38
1
+ ---
2
+ SHA512:
3
+ data.tar.gz: 1e3762a0add8f215482859c23933ef292a73c2512d18100d06ae47a452c4607a7ae65787a9c7adec74ceee8bf432461190eca7e23e61f8e8023939491285ab62
4
+ metadata.gz: 6833ac54593b8ce05f55570e9aba27df9c42041721dd5e8e84ceb70ee0331cb643b092297e76f8ce515f3ba87c05acf521e76617ae2133c46da6c411e11c1739
5
+ SHA1:
6
+ data.tar.gz: 451634ad2aaf6c9b1f7cf19c3a99a18dea15d097
7
+ metadata.gz: 50bd53594454c8b43afd26904e978a01a8a8004c
data/Gemfile CHANGED
@@ -6,3 +6,7 @@ group :development do
6
6
  gem 'rubocop'
7
7
  gem 'smart_proxy', :github => "theforeman/smart-proxy", :branch => 'develop'
8
8
  end
9
+
10
+ # load local gemfile
11
+ local_gemfile = File.join(File.dirname(__FILE__), 'Gemfile.local.rb')
12
+ self.instance_eval(Bundler.read_file(local_gemfile)) if File.exist?(local_gemfile)
data/README.md CHANGED
@@ -26,7 +26,7 @@ Learn more about [Foreman-OpenSCAP](https://github.com/theforeman/foreman_opensc
26
26
  - Add smart_proxy_openscap to your smart proxy `bundler.d/openscap.rb` gemfile:
27
27
 
28
28
  ```
29
- ~$ gem 'smart_proxy_openscap', :git => https://github.com/theforeman/smart_proxy_openscap.git
29
+ ~$ gem 'smart_proxy_openscap', :git => 'https://github.com/theforeman/smart_proxy_openscap.git'
30
30
  ```
31
31
 
32
32
  If you don't install through RPM and you are using bundler, you may need to create
@@ -9,7 +9,12 @@
9
9
  #
10
10
 
11
11
  require 'smart_proxy_openscap/openscap_api'
12
+ require 'smart_proxy_openscap/openscap_import_api'
12
13
 
13
14
  map '/compliance' do
14
15
  run Proxy::OpenSCAP::Api
15
16
  end
17
+
18
+ map '/compliance-importer' do
19
+ run Proxy::OpenSCAP::ImportApi
20
+ end
@@ -37,18 +37,15 @@ module Proxy::OpenSCAP
37
37
 
38
38
  begin
39
39
  post_to_foreman = ForemanForwarder.new.post_arf_report(cn, policy, date, request.body.string)
40
- Proxy::OpenSCAP::StorageFS.new(Proxy::OpenSCAP::Plugin.settings.reportsdir, cn, post_to_foreman['id'], date)
41
- .store_archive(request.body.string)
40
+ Proxy::OpenSCAP::StorageFS.new(Proxy::OpenSCAP::Plugin.settings.reportsdir, cn, post_to_foreman['id'], date).store_archive(request.body.string)
42
41
  rescue Proxy::OpenSCAP::StoreReportError => e
43
- Proxy::OpenSCAP::StorageFS.new(Proxy::OpenSCAP::Plugin.settings.failed_dir, cn, post_to_foreman['id'], date)
44
- .store_failed(request.body.string)
42
+ Proxy::OpenSCAP::StorageFS.new(Proxy::OpenSCAP::Plugin.settings.failed_dir, cn, post_to_foreman['id'], date).store_failed(request.body.string)
45
43
  logger.error "Failed to save Report in reports directory (#{Proxy::OpenSCAP::Plugin.settings.reportsdir}). Failed with: #{e.message}.
46
44
  Saving file in #{Proxy::OpenSCAP::Plugin.settings.failed_dir}. Please copy manually to #{Proxy::OpenSCAP::Plugin.settings.reportsdir}"
47
45
  rescue *HTTP_ERRORS => e
48
46
  ### If the upload to foreman fails then store it in the spooldir
49
47
  logger.error "Failed to upload to Foreman, saving in spool. Failed with: #{e.message}"
50
- Proxy::OpenSCAP::StorageFS.new(Proxy::OpenSCAP::Plugin.settings.spooldir, cn, policy, date)
51
- .store_spool(request.body.string)
48
+ Proxy::OpenSCAP::StorageFS.new(Proxy::OpenSCAP::Plugin.settings.spooldir, cn, policy, date).store_spool(request.body.string)
52
49
  rescue Proxy::OpenSCAP::StoreSpoolError => e
53
50
  log_halt 500, e.message
54
51
  end
@@ -57,8 +54,7 @@ module Proxy::OpenSCAP
57
54
  get "/arf/:id/:cname/:date/:digest/xml" do
58
55
  content_type 'application/x-bzip2'
59
56
  begin
60
- Proxy::OpenSCAP::StorageFS.new(Proxy::OpenSCAP::Plugin.settings.reportsdir, params[:cname], params[:id], params[:date])
61
- .get_arf_xml(params[:digest])
57
+ Proxy::OpenSCAP::StorageFS.new(Proxy::OpenSCAP::Plugin.settings.reportsdir, params[:cname], params[:id], params[:date]).get_arf_xml(params[:digest])
62
58
  rescue FileNotFound => e
63
59
  log_halt 500, "Could not find requested file, #{e.message}"
64
60
  end
@@ -66,17 +62,15 @@ module Proxy::OpenSCAP
66
62
 
67
63
  delete "/arf/:id/:cname/:date/:digest" do
68
64
  begin
69
- Proxy::OpenSCAP::StorageFS.new(Proxy::OpenSCAP::Plugin.settings.reportsdir, params[:cname], params[:id], params[:date])
70
- .delete_arf_file
65
+ Proxy::OpenSCAP::StorageFS.new(Proxy::OpenSCAP::Plugin.settings.reportsdir, params[:cname], params[:id], params[:date]).delete_arf_file
71
66
  rescue FileNotFound => e
72
- log_halt 500, "Could not find requested file, #{e.message}"
67
+ logger.debug "Could not find requested file, #{e.message} - Assuming deleted"
73
68
  end
74
69
  end
75
70
 
76
71
  get "/arf/:id/:cname/:date/:digest/html" do
77
72
  begin
78
- Proxy::OpenSCAP::StorageFS.new(Proxy::OpenSCAP::Plugin.settings.reportsdir, params[:cname], params[:id], params[:date])
79
- .get_arf_html(params[:digest])
73
+ Proxy::OpenSCAP::StorageFS.new(Proxy::OpenSCAP::Plugin.settings.reportsdir, params[:cname], params[:id], params[:date]).get_arf_html(params[:digest])
80
74
  rescue FileNotFound => e
81
75
  log_halt 500, "Could not find requested file, #{e.message}"
82
76
  end
@@ -0,0 +1,32 @@
1
+ module Proxy::OpenSCAP
2
+ class ImportApi < ::Sinatra::Base
3
+ include ::Proxy::Log
4
+ helpers ::Proxy::Helpers
5
+ authorize_with_trusted_hosts
6
+
7
+ require 'smart_proxy_openscap/openscap_lib'
8
+
9
+ post "/arf/:cname/:policy_id/:date" do
10
+ cn = params[:cname]
11
+ date = params[:date]
12
+ policy = params[:policy_id]
13
+ log_halt(500, "Insufficient data") if (cn.nil? || date.nil?)
14
+
15
+ post_to_foreman = ForemanForwarder.new.post_arf_report(cn, policy, date, request.body.string)
16
+ begin
17
+ Proxy::OpenSCAP::StorageFS.new(Proxy::OpenSCAP::Plugin.settings.reportsdir, cn, post_to_foreman['id'], date).store_archive(request.body.string)
18
+ rescue Proxy::OpenSCAP::StoreReportError => e
19
+ Proxy::OpenSCAP::StorageFS.new(Proxy::OpenSCAP::Plugin.settings.failed_dir, cn, post_to_foreman['id'], date).store_failed(request.body.string)
20
+ logger.error "Failed to save Report in reports directory (#{Proxy::OpenSCAP::Plugin.settings.reportsdir}). Failed with: #{e.message}.
21
+ Saving file in #{Proxy::OpenSCAP::Plugin.settings.failed_dir}. Please copy manually to #{Proxy::OpenSCAP::Plugin.settings.reportsdir}"
22
+ rescue *HTTP_ERRORS => e
23
+ ### If the upload to foreman fails then store it in the spooldir
24
+ logger.error "Failed to upload to Foreman, saving in spool. Failed with: #{e.message}"
25
+ Proxy::OpenSCAP::StorageFS.new(Proxy::OpenSCAP::Plugin.settings.spooldir, cn, policy, date).store_spool(request.body.string)
26
+ rescue Proxy::OpenSCAP::StoreSpoolError => e
27
+ log_halt 500, e.message
28
+ end
29
+ {:success => true, :arf_id => post_to_foreman['id']}.to_json
30
+ end
31
+ end
32
+ end
@@ -8,7 +8,7 @@
8
8
  # along with this software; if not, see http://www.gnu.org/licenses/gpl.txt
9
9
  #
10
10
 
11
- require 'smart_proxy_openscap/openscap_version'
11
+ require 'smart_proxy_openscap/version'
12
12
 
13
13
  module Proxy::OpenSCAP
14
14
  class Plugin < ::Proxy::Plugin
@@ -18,9 +18,9 @@ module Proxy::OpenSCAP
18
18
  https_rackup_path File.expand_path("http_config.ru", File.expand_path("../", __FILE__))
19
19
 
20
20
  default_settings :spooldir => '/var/spool/foreman-proxy/openscap',
21
- :openscap_send_log_file => 'logs/openscap-send.log',
22
- :contentdir => 'openscap/content',
23
- :reportsdir => 'openscap/reports',
24
- :failed_dir => 'openscap/failed'
21
+ :openscap_send_log_file => File.join(APP_ROOT, 'logs/openscap-send.log'),
22
+ :contentdir => File.join(APP_ROOT, 'openscap/content'),
23
+ :reportsdir => File.join(APP_ROOT, 'openscap/reports'),
24
+ :failed_dir => File.join(APP_ROOT, 'openscap/failed')
25
25
  end
26
26
  end
@@ -7,6 +7,8 @@ require 'openscap/xccdf/rule'
7
7
  require 'openscap/xccdf/fix'
8
8
  require 'openscap/xccdf/benchmark'
9
9
  require 'json'
10
+ require 'iconv' if RUBY_VERSION.start_with? '1.8'
11
+
10
12
  module Proxy::OpenSCAP
11
13
  class Parse
12
14
  def initialize(arf_data)
@@ -81,9 +83,15 @@ module Proxy::OpenSCAP
81
83
  # Sets the replacement string to the given value. The default replacement
82
84
  # string is "\uFFFD" for Unicode encoding forms, and "?" otherwise.
83
85
  def ascii8bit_to_utf8(string)
86
+ return ascii8bit_to_utf8_legacy(string) if RUBY_VERSION.start_with? '1.8'
84
87
  string.to_s.encode('utf-8', :invalid => :replace, :undef => :replace, :replace => '_')
85
88
  end
86
89
 
90
+ # String#encode appeared first in 1.9, so we need a workaround for 1.8
91
+ def ascii8bit_to_utf8_legacy(string)
92
+ Iconv.conv('UTF-8//IGNORE', 'UTF-8', string.to_s)
93
+ end
94
+
87
95
  def hash_a8b(ary)
88
96
  ary.map do |hash|
89
97
  Hash[hash.map { |key, value| [ascii8bit_to_utf8(key), ascii8bit_to_utf8(value)] }]
@@ -46,7 +46,7 @@ module Proxy::OpenSCAP
46
46
  begin
47
47
  FileUtils.mkdir_p @path
48
48
  rescue StandardError => e
49
- logger.error "Could not create '#{dir}' directory: #{e.message}"
49
+ logger.error "Could not create '#{@path}' directory: #{e.message}"
50
50
  raise e
51
51
  end
52
52
  @path
@@ -10,6 +10,6 @@
10
10
 
11
11
  module Proxy
12
12
  module OpenSCAP
13
- VERSION = '0.5.3'
13
+ VERSION = '0.5.4'
14
14
  end
15
15
  end
@@ -1,4 +1,4 @@
1
- require File.expand_path('../lib/smart_proxy_openscap/openscap_version', __FILE__)
1
+ require File.expand_path('../lib/smart_proxy_openscap/version', __FILE__)
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'smart_proxy_openscap'
data/test/test_helper.rb CHANGED
@@ -9,3 +9,4 @@ require 'smart_proxy_for_testing'
9
9
 
10
10
  # create log directory in our (not smart-proxy) directory
11
11
  FileUtils.mkdir_p File.dirname(Proxy::SETTINGS.log_file)
12
+ APP_ROOT = "#{File.dirname(__FILE__)}/.."
metadata CHANGED
@@ -1,98 +1,78 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: smart_proxy_openscap
3
- version: !ruby/object:Gem::Version
4
- version: 0.5.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.4
5
5
  platform: ruby
6
- authors:
7
- - Šimon Lukašík
6
+ authors:
7
+ - !binary |
8
+ xaBpbW9uIEx1a2HFocOtaw==
9
+
8
10
  - Shlomi Zadok
9
11
  - Marek Hulan
10
12
  autorequire:
11
13
  bindir: bin
12
14
  cert_chain: []
13
- date: 2016-01-27 00:00:00.000000000 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
15
+
16
+ date: 2016-06-02 00:00:00 Z
17
+ dependencies:
18
+ - !ruby/object:Gem::Dependency
16
19
  name: rake
17
- requirement: !ruby/object:Gem::Requirement
18
- requirements:
19
- - - ">="
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :development
23
20
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- version: '0'
29
- - !ruby/object:Gem::Dependency
30
- name: rack-test
31
- requirement: !ruby/object:Gem::Requirement
32
- requirements:
33
- - - ">="
34
- - !ruby/object:Gem::Version
35
- version: '0'
21
+ requirement: &id001 !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - &id002
24
+ - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: "0"
36
27
  type: :development
28
+ version_requirements: *id001
29
+ - !ruby/object:Gem::Dependency
30
+ name: rack-test
37
31
  prerelease: false
38
- version_requirements: !ruby/object:Gem::Requirement
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- version: '0'
43
- - !ruby/object:Gem::Dependency
44
- name: mocha
45
- requirement: !ruby/object:Gem::Requirement
46
- requirements:
47
- - - ">="
48
- - !ruby/object:Gem::Version
49
- version: '0'
32
+ requirement: &id003 !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - *id002
50
35
  type: :development
36
+ version_requirements: *id003
37
+ - !ruby/object:Gem::Dependency
38
+ name: mocha
51
39
  prerelease: false
52
- version_requirements: !ruby/object:Gem::Requirement
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- version: '0'
57
- - !ruby/object:Gem::Dependency
58
- name: webmock
59
- requirement: !ruby/object:Gem::Requirement
60
- requirements:
61
- - - ">="
62
- - !ruby/object:Gem::Version
63
- version: '0'
40
+ requirement: &id004 !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - *id002
64
43
  type: :development
44
+ version_requirements: *id004
45
+ - !ruby/object:Gem::Dependency
46
+ name: webmock
65
47
  prerelease: false
66
- version_requirements: !ruby/object:Gem::Requirement
67
- requirements:
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- version: '0'
71
- - !ruby/object:Gem::Dependency
48
+ requirement: &id005 !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - *id002
51
+ type: :development
52
+ version_requirements: *id005
53
+ - !ruby/object:Gem::Dependency
72
54
  name: openscap
73
- requirement: !ruby/object:Gem::Requirement
74
- requirements:
75
- - - ">="
76
- - !ruby/object:Gem::Version
77
- version: 0.4.3
78
- type: :runtime
79
55
  prerelease: false
80
- version_requirements: !ruby/object:Gem::Requirement
81
- requirements:
56
+ requirement: &id006 !ruby/object:Gem::Requirement
57
+ requirements:
82
58
  - - ">="
83
- - !ruby/object:Gem::Version
59
+ - !ruby/object:Gem::Version
84
60
  version: 0.4.3
61
+ type: :runtime
62
+ version_requirements: *id006
85
63
  description: |-
86
64
  A plug-in to the Foreman's smart-proxy which receives
87
65
  bzip2ed ARF files and forwards them to the Foreman.
88
66
  email: slukasik@redhat.com
89
- executables:
67
+ executables:
90
68
  - smart-proxy-openscap-send
91
69
  extensions: []
70
+
92
71
  extra_rdoc_files: []
93
- files:
94
- - ".rubocop.yml"
95
- - ".rubocop_todo.yml"
72
+
73
+ files:
74
+ - .rubocop.yml
75
+ - .rubocop_todo.yml
96
76
  - COPYING
97
77
  - Gemfile
98
78
  - README.md
@@ -108,13 +88,14 @@ files:
108
88
  - lib/smart_proxy_openscap/openscap_api.rb
109
89
  - lib/smart_proxy_openscap/openscap_content_parser.rb
110
90
  - lib/smart_proxy_openscap/openscap_exception.rb
91
+ - lib/smart_proxy_openscap/openscap_import_api.rb
111
92
  - lib/smart_proxy_openscap/openscap_lib.rb
112
93
  - lib/smart_proxy_openscap/openscap_plugin.rb
113
94
  - lib/smart_proxy_openscap/openscap_report_parser.rb
114
- - lib/smart_proxy_openscap/openscap_version.rb
115
95
  - lib/smart_proxy_openscap/spool_forwarder.rb
116
96
  - lib/smart_proxy_openscap/storage.rb
117
97
  - lib/smart_proxy_openscap/storage_fs.rb
98
+ - lib/smart_proxy_openscap/version.rb
118
99
  - settings.d/openscap.yml.example
119
100
  - smart_proxy_openscap.gemspec
120
101
  - test/data/arf_report
@@ -125,27 +106,27 @@ files:
125
106
  - test/scap_content_parser_api_test.rb
126
107
  - test/test_helper.rb
127
108
  homepage: http://github.com/OpenSCAP/smart_proxy_openscap
128
- licenses:
109
+ licenses:
129
110
  - GPL-3
130
111
  metadata: {}
112
+
131
113
  post_install_message:
132
114
  rdoc_options: []
133
- require_paths:
115
+
116
+ require_paths:
134
117
  - lib
135
- required_ruby_version: !ruby/object:Gem::Requirement
136
- requirements:
137
- - - ">="
138
- - !ruby/object:Gem::Version
139
- version: '0'
140
- required_rubygems_version: !ruby/object:Gem::Requirement
141
- requirements:
142
- - - ">="
143
- - !ruby/object:Gem::Version
144
- version: '0'
118
+ required_ruby_version: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - *id002
121
+ required_rubygems_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - *id002
145
124
  requirements: []
125
+
146
126
  rubyforge_project:
147
- rubygems_version: 2.4.8
127
+ rubygems_version: 2.0.17
148
128
  signing_key:
149
129
  specification_version: 4
150
130
  summary: OpenSCAP plug-in for Foreman's smart-proxy.
151
131
  test_files: []
132
+