foreman_openscap 0.4.3 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (153) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/foreman_openscap/load_report.js +1 -1
  3. data/app/assets/javascripts/foreman_openscap/policy_edit.js +0 -2
  4. data/app/controllers/api/v2/compliance/arf_reports_controller.rb +7 -22
  5. data/app/controllers/api/v2/compliance/policies_controller.rb +5 -5
  6. data/app/controllers/api/v2/compliance/scap_contents_controller.rb +3 -3
  7. data/app/controllers/arf_reports_controller.rb +62 -0
  8. data/app/controllers/{scaptimony_dashboard_controller.rb → compliance_dashboard_controller.rb} +1 -1
  9. data/app/controllers/compliance_hosts_controller.rb +5 -0
  10. data/app/controllers/{scaptimony_policies_controller.rb → policies_controller.rb} +13 -13
  11. data/app/controllers/{scaptimony_policy_dashboard_controller.rb → policy_dashboard_controller.rb} +3 -3
  12. data/app/controllers/{scaptimony_scap_contents_controller.rb → scap_contents_controller.rb} +11 -11
  13. data/app/helpers/{scaptimony_report_dashboard_helper.rb → arf_report_dashboard_helper.rb} +3 -5
  14. data/app/helpers/arf_reports_helper.rb +21 -0
  15. data/app/helpers/compliance_hosts_helper.rb +25 -0
  16. data/app/helpers/concerns/foreman_openscap/hosts_helper_extensions.rb +2 -32
  17. data/app/helpers/{scaptimony_policies_helper.rb → policies_helper.rb} +6 -2
  18. data/app/helpers/{scaptimony_policy_dashboard_helper.rb → policy_dashboard_helper.rb} +8 -8
  19. data/app/lib/proxy_api/available_proxy.rb +26 -0
  20. data/app/lib/proxy_api/openscap.rb +40 -0
  21. data/app/mailers/foreman_openscap/policy_mailer.rb +42 -0
  22. data/app/models/concerns/foreman_openscap/compliance_status_scoped_search.rb +91 -0
  23. data/app/models/concerns/foreman_openscap/host_extensions.rb +73 -17
  24. data/app/models/concerns/foreman_openscap/hostgroup_extensions.rb +3 -5
  25. data/app/models/foreman_openscap/arf_report.rb +165 -0
  26. data/app/models/foreman_openscap/asset.rb +27 -0
  27. data/app/models/foreman_openscap/asset_policy.rb +6 -0
  28. data/app/models/foreman_openscap/compliance_status.rb +50 -0
  29. data/app/models/{concerns/foreman_openscap/policy_extensions.rb → foreman_openscap/policy.rb} +72 -45
  30. data/app/models/foreman_openscap/policy_arf_report.rb +8 -0
  31. data/app/models/foreman_openscap/policy_revision.rb +6 -0
  32. data/app/models/foreman_openscap/scap_content.rb +112 -0
  33. data/app/models/foreman_openscap/scap_content_profile.rb +6 -0
  34. data/app/overrides/hosts/overview/host_compliance_status.rb +4 -4
  35. data/app/services/foreman_openscap/arf_report_status_calculator.rb +45 -0
  36. data/app/services/{scaptimony → foreman_openscap}/host_report_dashboard/data.rb +12 -6
  37. data/app/services/{scaptimony → foreman_openscap}/policy_dashboard/data.rb +5 -5
  38. data/app/services/{scaptimony → foreman_openscap}/report_dashboard/data.rb +4 -4
  39. data/app/views/api/v2/compliance/policies/create.json.rabl +3 -0
  40. data/app/views/{scaptimony_arf_reports → arf_reports}/_list.html.erb +4 -4
  41. data/app/views/arf_reports/_metrics.html.erb +37 -0
  42. data/app/views/arf_reports/_output.html.erb +23 -0
  43. data/app/views/{scaptimony_arf_reports → arf_reports}/index.html.erb +0 -0
  44. data/app/views/arf_reports/show.html.erb +14 -0
  45. data/app/views/{scaptimony_arf_reports/show.html.erb → arf_reports/show_html.html.erb} +2 -3
  46. data/app/views/compliance_hosts/_compliance_status.erb +6 -0
  47. data/app/views/{scaptimony_hosts → compliance_hosts}/show.html.erb +9 -2
  48. data/app/views/dashboard/{_foreman_openscap_host_reports_widget.html.erb → _compliance_host_reports_widget.html.erb} +3 -3
  49. data/app/views/dashboard/{_foreman_openscap_reports_breakdown_widget.html.erb → _compliance_reports_breakdown_widget.html.erb} +1 -1
  50. data/app/views/foreman_openscap/policy_mailer/_dashboard.erb +21 -0
  51. data/app/views/foreman_openscap/policy_mailer/_hosts.erb +44 -0
  52. data/app/views/foreman_openscap/policy_mailer/_list.erb +10 -0
  53. data/app/views/foreman_openscap/policy_mailer/_policy.erb +7 -0
  54. data/app/views/foreman_openscap/policy_mailer/policy_summary.erb +19 -0
  55. data/app/views/{scaptimony_policies → policies}/_form.html.erb +2 -8
  56. data/app/views/{scaptimony_policies → policies}/_list.html.erb +5 -5
  57. data/app/views/policies/_scap_content_results.html.erb +3 -0
  58. data/app/views/policies/create.html.erb +2 -0
  59. data/app/views/{scaptimony_policies → policies}/disassociate_multiple_hosts.html.erb +2 -2
  60. data/app/views/{scaptimony_policies → policies}/edit.html.erb +0 -0
  61. data/app/views/{scaptimony_policies → policies}/index.html.erb +1 -1
  62. data/app/views/policies/new.html.erb +2 -0
  63. data/app/views/{scaptimony_policies → policies}/select_multiple_hosts.html.erb +2 -2
  64. data/app/views/{scaptimony_policies → policies}/show.html.erb +1 -1
  65. data/app/views/{scaptimony_policies → policies}/steps/_create_policy_form.html.erb +0 -0
  66. data/app/views/{scaptimony_policies → policies}/steps/_hostgroups_form.html.erb +0 -0
  67. data/app/views/{scaptimony_policies → policies}/steps/_locations_form.html.erb +0 -0
  68. data/app/views/{scaptimony_policies → policies}/steps/_organizations_form.html.erb +0 -0
  69. data/app/views/policies/steps/_scap_content_form.html.erb +9 -0
  70. data/app/views/{scaptimony_policies → policies}/steps/_schedule_form.html.erb +1 -1
  71. data/app/views/{scaptimony_policies → policies}/steps/_step_form.html.erb +3 -3
  72. data/app/views/{scaptimony_policies → policies}/welcome.html.erb +2 -2
  73. data/app/views/{scaptimony_policy_dashboard → policy_dashboard}/_policy_chart_widget.html.erb +0 -0
  74. data/app/views/{scaptimony_policy_dashboard → policy_dashboard}/_policy_reports.html.erb +2 -2
  75. data/app/views/{scaptimony_policy_dashboard → policy_dashboard}/_policy_status_widget.html.erb +3 -3
  76. data/app/views/{scaptimony_policy_dashboard → policy_dashboard}/index.html.erb +0 -0
  77. data/app/views/{scaptimony_scap_contents → scap_contents}/_form.html.erb +5 -6
  78. data/app/views/{scaptimony_scap_contents → scap_contents}/_list.html.erb +3 -3
  79. data/app/views/{scaptimony_scap_contents → scap_contents}/edit.html.erb +0 -0
  80. data/app/views/{scaptimony_scap_contents → scap_contents}/index.html.erb +1 -1
  81. data/app/views/{scaptimony_scap_contents → scap_contents}/new.html.erb +0 -0
  82. data/app/views/{scaptimony_scap_contents → scap_contents}/welcome.html.erb +2 -2
  83. data/config/routes.rb +15 -11
  84. data/db/migrate/20141013172051_create_scaptimony_policies.rb +9 -0
  85. data/db/migrate/20141014105333_create_scaptimony_assets.rb +10 -0
  86. data/db/migrate/20141015092642_create_scaptimony_arf_reports.rb +13 -0
  87. data/db/migrate/20141015115511_add_arf_report_unique_constraint.rb +6 -0
  88. data/db/migrate/20141104164201_create_scaptimony_scap_contents.rb +7 -0
  89. data/db/migrate/20141104171545_create_scaptimony_policy_revisions.rb +14 -0
  90. data/db/migrate/20141105174625_add_description_to_scaptimony_policy_revisions.rb +5 -0
  91. data/db/migrate/20141105174834_add_columns_to_scaptimony_policies.rb +12 -0
  92. data/db/migrate/20141107091756_add_columns_to_scaptimony_scap_contents.rb +8 -0
  93. data/db/migrate/20141111104519_add_constraint_to_scaptimony_scap_contents.rb +5 -0
  94. data/db/migrate/20141113221054_create_scaptimony_scap_content_profiles.rb +12 -0
  95. data/db/migrate/20141116170632_remove_xccdf_profile_from_scaptimony_policies.rb +5 -0
  96. data/db/migrate/20141116171305_add_profile_to_scaptimony_policies.rb +6 -0
  97. data/db/migrate/20141118142954_add_constraint_to_scaptimony_policies.rb +5 -0
  98. data/db/migrate/20141119164918_create_scaptimony_xccdf_results.rb +8 -0
  99. data/db/migrate/20141119175434_create_scaptimony_xccdf_rules.rb +8 -0
  100. data/db/migrate/20141119182606_create_scaptimony_xccdf_rule_results.rb +9 -0
  101. data/db/migrate/20141121120326_create_scaptimony_arf_report_breakdowns.rb +24 -0
  102. data/db/migrate/20141121164042_replace_arf_report_breakdown_view.rb +25 -0
  103. data/db/migrate/20141206211151_create_scaptimony_assets_policies.rb +9 -0
  104. data/db/migrate/20141214112917_add_scap_file_to_scap_content.rb +5 -0
  105. data/db/migrate/20141216154502_rename_scaptimony_asset_policies.rb +5 -0
  106. data/db/migrate/20150111085317_polymorph_asset.rb +8 -0
  107. data/db/migrate/20150112152944_create_scaptimony_arf_report_raws.rb +10 -0
  108. data/db/migrate/20150114210634_rename_scaptimony_arf_report_raw_raw.rb +5 -0
  109. data/db/migrate/20150115155947_add_scaptimony_scap_content_digest.rb +21 -0
  110. data/db/migrate/20150116083129_add_day_of_month_and_cron_line_to_scaptimony_policy.rb +6 -0
  111. data/db/migrate/20150821100137_migrate_from_scaptimony.rb +59 -0
  112. data/db/migrate/20150827123826_remove_scaptimony_permissions.rb +21 -0
  113. data/db/migrate/20150925124959_create_policy_arf_reports.rb +13 -0
  114. data/db/migrate/20150929124853_add_result_to_logs.rb +9 -0
  115. data/db/migrate/20150929152345_move_arf_reports_to_reports_table.rb +179 -0
  116. data/db/migrate/20151023131950_link_arf_report_directly_to_host.rb +17 -0
  117. data/db/seeds.d/openscap_policy_notification.rb +9 -0
  118. data/lib/foreman_openscap/bulk_upload.rb +3 -1
  119. data/lib/foreman_openscap/engine.rb +53 -42
  120. data/lib/foreman_openscap/helper.rb +8 -0
  121. data/lib/foreman_openscap/version.rb +1 -1
  122. data/lib/tasks/foreman_openscap_tasks.rake +14 -0
  123. data/test/factories/arf_report_factory.rb +9 -6
  124. data/test/factories/asset_factory.rb +1 -1
  125. data/test/factories/compliance_host_factory.rb +9 -0
  126. data/test/factories/compliance_log_factory.rb +11 -0
  127. data/test/factories/policy_arf_report_factory.rb +6 -0
  128. data/test/factories/policy_factory.rb +3 -2
  129. data/test/factories/scap_content_related.rb +2 -2
  130. data/test/functional/api/v2/compliance/arf_reports_controller_test.rb +4 -3
  131. data/test/functional/api/v2/compliance/policies_controller_test.rb +2 -2
  132. data/test/functional/api/v2/compliance/scap_contents_controller_test.rb +3 -1
  133. data/test/lib/foreman_openscap/bulk_upload_test.rb +1 -1
  134. data/test/test_plugin_helper.rb +30 -0
  135. data/test/unit/arf_report_status_calculator_test.rb +11 -0
  136. data/test/unit/arf_report_test.rb +148 -0
  137. data/test/unit/compliance_status_test.rb +71 -0
  138. data/test/unit/openscap_host_test.rb +38 -7
  139. data/test/unit/policy_mailer_test.rb +38 -0
  140. data/test/unit/scap_content_test.rb +32 -0
  141. metadata +130 -74
  142. data/app/controllers/scaptimony_arf_reports_controller.rb +0 -34
  143. data/app/controllers/scaptimony_hosts_controller.rb +0 -5
  144. data/app/models/concerns/foreman_openscap/arf_report_extensions.rb +0 -50
  145. data/app/models/concerns/foreman_openscap/asset_extensions.rb +0 -34
  146. data/app/models/concerns/foreman_openscap/scap_content_extensions.rb +0 -40
  147. data/app/overrides/hosts/index/host_arf_report.rb +0 -5
  148. data/app/views/scaptimony_arf_reports/_host_report.html.erb +0 -8
  149. data/app/views/scaptimony_hosts/_host_status.html.erb +0 -17
  150. data/app/views/scaptimony_policies/_scap_content_results.html.erb +0 -7
  151. data/app/views/scaptimony_policies/create.html.erb +0 -2
  152. data/app/views/scaptimony_policies/new.html.erb +0 -2
  153. data/app/views/scaptimony_policies/steps/_scap_content_form.html.erb +0 -17
@@ -0,0 +1,17 @@
1
+ class LinkArfReportDirectlyToHost < ActiveRecord::Migration
2
+ def up
3
+ ForemanOpenscap::ArfReport.all.each do |report|
4
+ asset = ForemanOpenscap::Asset.where(:id => report.host_id).first
5
+ report.host_id = asset.host.id
6
+ report.save!
7
+ end
8
+ end
9
+
10
+ def down
11
+ ForemanOpenscap::ArfReport.all.each do |report|
12
+ asset = ForemanOpenscap::Asset.where(:assetable_id => report.host_id, :assetable_type => 'Host::Base').first
13
+ report.host_id = asset.id
14
+ report.save!
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,9 @@
1
+ policy_notification = {
2
+ :name => :openscap_policy_summary,
3
+ :description => N_('A summary of reports for OpenScap policies'),
4
+ :mailer => 'ForemanOpenscap::PolicyMailer',
5
+ :method => 'policy_summary',
6
+ :subscription_type => 'report',
7
+ }
8
+
9
+ MailNotification.where(policy_notification).first_or_create
@@ -24,10 +24,12 @@ module ForemanOpenscap
24
24
  digest = Digest::SHA2.hexdigest(datastream)
25
25
  title = content_name(datastream)
26
26
  filename = original_filename(datastream)
27
- scap_content = Scaptimony::ScapContent.where(:title => title, :digest => digest).first_or_initialize
27
+ scap_content = ScapContent.where(:title => title, :digest => digest).first_or_initialize
28
28
  unless scap_content.persisted?
29
29
  scap_content.scap_file = file
30
30
  scap_content.original_filename = filename
31
+ scap_content.location_ids = Location.all.map(&:id) if SETTINGS[:locations_enabled]
32
+ scap_content.organization_ids = Organization.all.map(&:id) if SETTINGS[:organizations_enabled]
31
33
  next puts "## SCAP content is invalid: #{scap_content.errors.full_messages.uniq.join(',')} ##" unless scap_content.valid?
32
34
  if scap_content.save
33
35
  puts "Saved #{datastream} as #{scap_content.title}"
@@ -1,5 +1,4 @@
1
1
  require 'deface'
2
- require 'scaptimony/engine'
3
2
 
4
3
  module ForemanOpenscap
5
4
  class Engine < ::Rails::Engine
@@ -7,11 +6,14 @@ module ForemanOpenscap
7
6
  config.autoload_paths += Dir["#{config.root}/app/controllers/concerns"]
8
7
  config.autoload_paths += Dir["#{config.root}/app/helpers/concerns"]
9
8
  config.autoload_paths += Dir["#{config.root}/app/models/concerns"]
9
+ config.autoload_paths += Dir["#{config.root}/app/models"]
10
10
  config.autoload_paths += Dir["#{config.root}/app/overrides"]
11
+ config.autoload_paths += Dir["#{config.root}/app/lib"]
12
+ config.autoload_paths += Dir["#{config.root}/lib"]
13
+ config.autoload_paths += Dir["#{config.root}/test/"]
11
14
 
12
15
  # Add any db migrations
13
16
  initializer "foreman_openscap.load_app_instance_data" do |app|
14
- app.config.paths['db/migrate'] += Scaptimony::Engine.paths['db/migrate'].existent
15
17
  app.config.paths['db/migrate'] += ForemanOpenscap::Engine.paths['db/migrate'].existent
16
18
  end
17
19
 
@@ -21,7 +23,7 @@ module ForemanOpenscap
21
23
  f.split(File::SEPARATOR, 4).last
22
24
  end
23
25
  end
24
-
26
+
25
27
  initializer 'foreman_openscap.assets.precompile' do |app|
26
28
  app.config.assets.precompile += assets_to_precompile
27
29
  end
@@ -37,74 +39,80 @@ module ForemanOpenscap
37
39
 
38
40
  initializer 'foreman_openscap.register_plugin', :after => :finisher_hook do |app|
39
41
  Foreman::Plugin.register :foreman_openscap do
40
- requires_foreman '>= 1.5'
42
+ requires_foreman '>= 1.11'
41
43
 
42
44
  apipie_documented_controllers ["#{ForemanOpenscap::Engine.root}/app/controllers/api/v2/compliance/*.rb"]
43
45
 
46
+ version = SETTINGS[:version]
47
+ register_custom_status ForemanOpenscap::ComplianceStatus if version.major.to_i >= 1 && version.minor.to_i >= 10
48
+
44
49
  # Add permissions
45
50
  security_block :foreman_openscap do
46
- permission :view_arf_reports, {:scaptimony_arf_reports => [:index, :show, :parse, :auto_complete_search],
51
+ permission :view_arf_reports, {:arf_reports => [:index, :show, :parse_html, :show_html,
52
+ :parse_bzip, :auto_complete_search],
47
53
  'api/v2/compliance/arf_reports' => [:index, :show],
48
- :scaptimony_hosts => [:show]}
49
- permission :destroy_arf_reports, {:scaptimony_arf_reports => [:destroy],
54
+ :compliance_hosts => [:show]}
55
+ permission :destroy_arf_reports, {:arf_reports => [:destroy],
50
56
  'api/v2/compliance/arf_reports' => [:destroy]}
51
57
  permission :create_arf_reports, {'api/v2/compliance/arf_reports' => [:create]}
52
58
 
53
- permission :view_scaptimony_policies, {:scaptimony_policies => [:index, :show, :parse, :auto_complete_search],
54
- :scaptimony_policy_dashboard => [:index],
55
- :scaptimony_dashboard => [:index],
59
+ permission :view_policies, {:policies => [:index, :show, :parse, :auto_complete_search],
60
+ :policy_dashboard => [:index],
61
+ :compliance_dashboard => [:index],
56
62
  'api/v2/compliance/policies' => [:index, :show, :content]},
57
- :resource_type => 'Scaptimony::Policy'
58
- permission :edit_scaptimony_policies, {:scaptimony_policies => [:edit, :update, :scap_content_selected],
63
+ :resource_type => 'ForemanOpenscap::Policy'
64
+ permission :edit_policies, {:policies => [:edit, :update, :scap_content_selected],
59
65
  'api/v2/compliance/policies' => [:update]},
60
- :resource_type => 'Scaptimony::Policy'
61
- permission :create_scaptimony_policies, {:scaptimony_policies => [:new, :create],
66
+ :resource_type => 'ForemanOpenscap::Policy'
67
+ permission :create_policies, {:policies => [:new, :create],
62
68
  'api/v2/compliance/policies' => [:create]},
63
- :resource_type => 'Scaptimony::Policy'
64
- permission :destroy_scaptimony_policies, {:scaptimony_policies => [:destroy],
69
+ :resource_type => 'ForemanOpenscap::Policy'
70
+ permission :destroy_policies, {:policies => [:destroy],
65
71
  'api/v2/compliance/policies' => [:destroy]},
66
- :resource_type => 'Scaptimony::Policy'
67
- permission :assign_scaptimony_policies, {:scaptimony_policies => [:select_multiple_hosts, :update_multiple_hosts,
72
+ :resource_type => 'ForemanOpenscap::Policy'
73
+ permission :assign_policies, {:policies => [:select_multiple_hosts, :update_multiple_hosts,
68
74
  :disassociate_multiple_hosts,
69
75
  :remove_policy_from_multiple_hosts]},
70
- :resource_type => 'Scaptimony::Policy'
71
- permission :view_scaptimony_scap_contents, {:scaptimony_scap_contents => [:index, :show, :auto_complete_search],
76
+ :resource_type => 'ForemanOpenscap::Policy'
77
+ permission :view_scap_contents, {:scap_contents => [:index, :show, :auto_complete_search],
72
78
  'api/v2/compliance/scap_contents' => [:index, :show]},
73
- :resource_type => 'Scaptimony::ScapContent'
74
- permission :edit_scaptimony_scap_contents, {:scaptimony_scap_contents => [:edit, :update],
79
+ :resource_type => 'ForemanOpenscap::ScapContent'
80
+ permission :edit_scap_contents, {:scap_contents => [:edit, :update],
75
81
  'api/v2/compliance/scap_contents' => [:update]},
76
- :resource_type => 'Scaptimony::ScapContent'
77
- permission :create_scaptimony_scap_contents, {:scaptimony_scap_contents => [:new, :create],
82
+ :resource_type => 'ForemanOpenscap::ScapContent'
83
+ permission :create_scap_contents, {:scap_contents => [:new, :create],
78
84
  'api/v2/compliance/scap_contents' => [:create]},
79
- :resource_type => 'Scaptimony::ScapContent'
80
- permission :destroy_scaptimony_scap_contents, {:scaptimony_scap_contents => [:destroy],
85
+ :resource_type => 'ForemanOpenscap::ScapContent'
86
+ permission :destroy_scap_contents, {:scap_contents => [:destroy],
81
87
  'api/v2/compliance/scap_contents' => [:destroy]},
82
- :resource_type => 'Scaptimony::ScapContent'
88
+ :resource_type => 'ForemanOpenscap::ScapContent'
83
89
  end
84
90
 
85
- role "Compliance viewer", [:view_arf_reports, :view_scaptimony_policies, :view_scaptimony_scap_contents]
86
- role "Compliance manager", [:view_arf_reports, :view_scaptimony_policies, :view_scaptimony_scap_contents,
87
- :destroy_arf_reports, :edit_scaptimony_policies, :edit_scaptimony_scap_contents, :assign_scaptimony_policies,
88
- :create_scaptimony_policies, :create_scaptimony_scap_contents, :destroy_scaptimony_policies, :destroy_scaptimony_scap_contents]
91
+ role "Compliance viewer", [:view_arf_reports, :view_policies, :view_scap_contents]
92
+ role "Compliance manager", [:view_arf_reports, :view_policies, :view_scap_contents,
93
+ :destroy_arf_reports, :edit_policies, :edit_scap_contents, :assign_policies,
94
+ :create_policies, :create_scap_contents, :destroy_policies, :destroy_scap_contents]
89
95
  role "Create ARF report", [:create_arf_reports] # special as only Proxy can create
90
96
 
91
97
  #add menu entries
92
98
  divider :top_menu, :caption => N_('Compliance'), :parent => :hosts_menu
93
99
  menu :top_menu, :compliance_policies, :caption => N_('Policies'),
94
- :url_hash => {:controller => :'scaptimony_policies', :action => :index},
100
+ :url_hash => {:controller => :'policies', :action => :index},
95
101
  :parent => :hosts_menu
96
102
  menu :top_menu, :compliance_contents, :caption => N_('SCAP contents'),
97
- :url_hash => {:controller => :'scaptimony_scap_contents', :action => :index},
103
+ :url_hash => {:controller => :'scap_contents', :action => :index},
98
104
  :parent => :hosts_menu
99
105
  menu :top_menu, :compliance_reports, :caption => N_('Reports'),
100
- :url_hash => {:controller => :'scaptimony_arf_reports', :action => :index},
106
+ :url_hash => {:controller => :'arf_reports', :action => :index},
101
107
  :parent => :hosts_menu
102
108
 
103
109
  # add dashboard widget
104
- widget 'foreman_openscap_host_reports_widget', :name => N_('OpenSCAP Host reports widget'), :sizex => 4, :sizey => 1
105
- widget 'foreman_openscap_reports_breakdown_widget', :name => N_('OpenSCAP Host reports widget'), :sizex => 4, :sizey => 1
110
+ widget 'compliance_host_reports_widget',
111
+ :name => N_('OpenSCAP Host reports widget'), :sizex => 4, :sizey => 1
112
+ widget 'compliance_reports_breakdown_widget',
113
+ :name => N_('OpenSCAP Reports breakdown widget'), :sizex => 4, :sizey => 1
106
114
 
107
- # As 'scaptimony_arf_report_breakdowns' is a view and does not appear in schema.rb, db:test:prepare will not create the view
115
+ # As 'arf_report_breakdowns' is a view and does not appear in schema.rb, db:test:prepare will not create the view
108
116
  # which will make the following tests fail.
109
117
  tests_to_skip ({
110
118
  "DashboardIntegrationTest" => ["dashboard page", "dashboard link hosts that had performed modifications",
@@ -121,18 +129,21 @@ module ForemanOpenscap
121
129
  Host::Managed.send(:include, ForemanOpenscap::HostExtensions)
122
130
  HostsHelper.send(:include, ForemanOpenscap::HostsHelperExtensions)
123
131
  Hostgroup.send(:include, ForemanOpenscap::HostgroupExtensions)
124
- ::Scaptimony::ArfReport.send(:include, ForemanOpenscap::ArfReportExtensions)
125
- ::Scaptimony::Asset.send(:include, ForemanOpenscap::AssetExtensions)
126
- ::Scaptimony::Policy.send(:include, ForemanOpenscap::PolicyExtensions)
127
- ::Scaptimony::ScapContent.send(:include, ForemanOpenscap::ScapContentExtensions)
132
+ Report.send(:include, ForemanOpenscap::ComplianceStatusScopedSearch)
128
133
  end
129
134
 
130
135
  rake_tasks do
131
136
  Rake::Task['db:seed'].enhance do
132
- Scaptimony::Engine.load_seed
133
137
  ForemanOpenscap::Engine.load_seed
134
138
  end
135
139
  end
140
+ end
141
+
142
+ def self.table_name_prefix
143
+ "foreman_openscap_"
144
+ end
136
145
 
146
+ def self.use_relative_model_naming?
147
+ true
137
148
  end
138
149
  end
@@ -15,6 +15,14 @@ module ForemanOpenscap::Helper
15
15
  asset
16
16
  end
17
17
 
18
+ def self.find_name_or_uuid_by_host(host)
19
+ if defined?(::Katello::System)
20
+ host.content_host.uuid
21
+ else
22
+ host.name
23
+ end
24
+ end
25
+
18
26
  private
19
27
 
20
28
  def self.find_host_by_name_or_uuid(cname)
@@ -1,3 +1,3 @@
1
1
  module ForemanOpenscap
2
- VERSION = "0.4.3"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -16,6 +16,20 @@ namespace :foreman_openscap do
16
16
  ForemanOpenscap::BulkUpload.new.upload_from_files(files_array)
17
17
  end
18
18
  end
19
+
20
+ task :rubocop do
21
+ begin
22
+ require 'rubocop/rake_task'
23
+ RuboCop::RakeTask.new(:rubocop_foreman_openscap) do |task|
24
+ task.patterns = ["#{ForemanOpenscap::Engine.root}/app/**/*.rb",
25
+ "#{ForemanOpenscap::Engine.root}/lib/**/*.rb",
26
+ "#{ForemanOpenscap::Engine.root}/test/**/*.rb"]
27
+ end
28
+ rescue
29
+ puts 'Rubocop not loaded.'
30
+ end
31
+ Rake::Task['rubocop_foreman_openscap'].invoke
32
+ end
19
33
  end
20
34
 
21
35
  # Tests
@@ -1,8 +1,11 @@
1
1
  FactoryGirl.define do
2
- factory :arf_report, :class => Scaptimony::ArfReport do |f|
3
- f.asset
4
- f.policy
5
- f.sequence(:digest) { |n| "#{n}1212aa#{n}"}
6
- date '1973-01-13'
2
+ factory :arf_report, :class => ::ForemanOpenscap::ArfReport do
3
+ host_id 1
4
+ policy nil
5
+ policy_arf_report nil
6
+ sequence(:reported_at) { |n| Time.new(1490 + n, 01, 13, 15, 24, 00)}
7
+ logs []
8
+ status 0
9
+ metrics {}
7
10
  end
8
- end
11
+ end
@@ -1,5 +1,5 @@
1
1
  FactoryGirl.define do
2
- factory :asset, :class => Scaptimony::Asset do |f|
2
+ factory :asset, :class => ::ForemanOpenscap::Asset do |f|
3
3
  f.assetable_id { FactoryGirl.create(:host).id }
4
4
  f.assetable_type 'Host::Base'
5
5
  end
@@ -0,0 +1,9 @@
1
+ FactoryGirl.define do
2
+ factory :compliance_host, :class => Host::Managed do
3
+ sequence(:name) { |n| "host#{n}" }
4
+ sequence(:hostname) { |n| "hostname#{n}" }
5
+ root_pass 'xybxa6JUkz63w'
6
+ policies []
7
+ asset nil
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ FactoryGirl.define do
2
+ factory :compliance_log, :class => :log do
3
+ result "fail"
4
+ report
5
+ level_id 1
6
+ source nil
7
+ after(:build) do |log|
8
+ log.message = FactoryGirl.create(:message)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,6 @@
1
+ FactoryGirl.define do
2
+ factory :policy_arf_report, :class => ForemanOpenscap::PolicyArfReport do
3
+ policy_id nil
4
+ arf_report_id nil
5
+ end
6
+ end
@@ -1,5 +1,5 @@
1
1
  FactoryGirl.define do
2
- factory :policy, :class => Scaptimony::Policy do
2
+ factory :policy, :class => ::ForemanOpenscap::Policy do
3
3
  sequence(:name) { |n| "policy#{n}" }
4
4
  period 'weekly'
5
5
  weekday 'monday'
@@ -7,5 +7,6 @@ FactoryGirl.define do
7
7
  scap_content_profile
8
8
  day_of_month '1'
9
9
  cron_line '* * * * 30'
10
+ hosts []
10
11
  end
11
- end
12
+ end
@@ -1,13 +1,13 @@
1
1
  include ActionDispatch::TestProcess
2
2
 
3
3
  FactoryGirl.define do
4
- factory :scap_content, :class => Scaptimony::ScapContent do |f|
4
+ factory :scap_content, :class => ::ForemanOpenscap::ScapContent do |f|
5
5
  f.title 'fedora'
6
6
  f.original_filename 'fedora ds'
7
7
  f.scap_file { File.new('../foreman_openscap/test/files/scap_contents/ssg-fedora-ds.xml', 'rb').read }
8
8
  end
9
9
 
10
- factory :scap_content_profile, :class => Scaptimony::ScapContentProfile do |f|
10
+ factory :scap_content_profile, :class => ::ForemanOpenscap::ScapContentProfile do |f|
11
11
  f.scap_content
12
12
  f.profile_id 'xccdf_org.test.common_test_profile'
13
13
  f.title 'test Profile for testing'
@@ -3,10 +3,11 @@ require 'test_plugin_helper'
3
3
  class Api::V2::Compliance::ArfReportsControllerTest < ActionController::TestCase
4
4
  setup do
5
5
  # override validation of policy (puppetclass, lookup_key overrides)
6
- Scaptimony::Policy.any_instance.stubs(:valid?).returns(true)
6
+ ForemanOpenscap::Policy.any_instance.stubs(:valid?).returns(true)
7
+ @asset = FactoryGirl.create(:asset)
8
+ @report = FactoryGirl.create(:arf_report, :asset => @asset)
7
9
  end
8
10
  test "should get index" do
9
- FactoryGirl.create(:arf_report)
10
11
  get :index, {}, set_session_user
11
12
  response = ActiveSupport::JSON.decode(@response.body)
12
13
  assert_not response['results'].empty?
@@ -14,7 +15,7 @@ class Api::V2::Compliance::ArfReportsControllerTest < ActionController::TestCase
14
15
  end
15
16
 
16
17
  test "should get show" do
17
- get :show, { :id => FactoryGirl.create(:arf_report).to_param }, set_session_user
18
+ get :show, { :id => @report.to_param }, set_session_user
18
19
  response = ActiveSupport::JSON.decode(@response.body)
19
20
  refute response['passed'].blank?
20
21
  refute response['failed'].blank?
@@ -2,7 +2,7 @@ require 'test_plugin_helper'
2
2
 
3
3
  class Api::V2::Compliance::PoliciesControllerTest < ActionController::TestCase
4
4
  setup do
5
- Scaptimony::Policy.any_instance.stubs(:ensure_needed_puppetclasses).returns(true)
5
+ ::ForemanOpenscap::Policy.any_instance.stubs(:ensure_needed_puppetclasses).returns(true)
6
6
  end
7
7
 
8
8
  test "should get index" do
@@ -53,7 +53,7 @@ class Api::V2::Compliance::PoliciesControllerTest < ActionController::TestCase
53
53
  policy = FactoryGirl.create(:policy)
54
54
  delete :destroy, { :id => policy.id }, set_session_user
55
55
  assert_response :ok
56
- refute Scaptimony::Policy.exists?(policy.id)
56
+ refute ForemanOpenscap::Policy.exists?(policy.id)
57
57
  end
58
58
 
59
59
  test "should return xml of scap content" do
@@ -34,6 +34,8 @@ class Api::V2::Compliance::ScapContentsControllerTest < ActionController::TestCa
34
34
  end
35
35
 
36
36
  test "should not update invalid scap content" do
37
+ skip("Solve 'ActiveRecord::RecordInvalid' error")
38
+ ProxyAPI::Openscap.any_instance.stubs(:validate_scap_content).returns({'errors' => ['Invalid file']})
37
39
  scap_content = FactoryGirl.create(:scap_content)
38
40
  put :update, { :id => scap_content.id, :scap_content => {:scap_file => '<xml>blah</xml>'}}, set_session_user
39
41
  assert_response :unprocessable_entity
@@ -43,6 +45,6 @@ class Api::V2::Compliance::ScapContentsControllerTest < ActionController::TestCa
43
45
  scap_content = FactoryGirl.create(:scap_content)
44
46
  delete :destroy, { :id => scap_content.id }, set_session_user
45
47
  assert_response :ok
46
- refute Scaptimony::ScapContent.exists?(scap_content.id)
48
+ refute ForemanOpenscap::ScapContent.exists?(scap_content.id)
47
49
  end
48
50
  end
@@ -7,7 +7,7 @@ class BulkUploadTest < ActiveSupport::TestCase
7
7
 
8
8
  test 'upload_from_files should create only one scap content' do
9
9
  scap_files = ['../foreman_openscap/test/files/scap_contents/ssg-fedora-ds.xml']
10
- assert_difference('Scaptimony::ScapContent.count', 1) do
10
+ assert_difference('ForemanOpenscap::ScapContent.count', 1) do
11
11
  2.times do
12
12
  ForemanOpenscap::BulkUpload.new.upload_from_files(scap_files)
13
13
  end
@@ -4,3 +4,33 @@ require 'test_helper'
4
4
  # Add plugin to FactoryGirl's paths
5
5
  FactoryGirl.definition_file_paths << File.join(File.dirname(__FILE__), 'factories')
6
6
  FactoryGirl.reload
7
+
8
+ Spork.each_run do
9
+ class ActionController::TestCase
10
+ setup :add_smart_proxy
11
+
12
+ private
13
+
14
+ def add_smart_proxy
15
+ FactoryGirl.create(:smart_proxy, :url => 'http://localhost:8443', :features => [FactoryGirl.create(:feature, :name => 'Openscap')])
16
+ ::ProxyAPI::Features.any_instance.stubs(:features).returns(['puppet', 'openscap'])
17
+ ProxyAPI::Openscap.any_instance.stubs(:validate_scap_content).returns({'errors' => []})
18
+ ProxyAPI::Openscap.any_instance.stubs(:fetch_policies_for_scap_content)
19
+ .returns({'xccdf_org.ssgproject.content_profile_common' => 'Common Profile for General-Purpose Fedora Systems'})
20
+ end
21
+ end
22
+
23
+ class ActiveSupport::TestCase
24
+ setup :add_smart_proxy
25
+
26
+ private
27
+
28
+ def add_smart_proxy
29
+ FactoryGirl.create(:smart_proxy, :url => 'http://localhost:8443', :features => [FactoryGirl.create(:feature, :name => 'Openscap')])
30
+ ::ProxyAPI::Features.any_instance.stubs(:features).returns(['puppet', 'openscap'])
31
+ ProxyAPI::Openscap.any_instance.stubs(:validate_scap_content).returns({'errors' => []})
32
+ ProxyAPI::Openscap.any_instance.stubs(:fetch_policies_for_scap_content)
33
+ .returns({'xccdf_org.ssgproject.content_profile_common' => 'Common Profile for General-Purpose Fedora Systems'})
34
+ end
35
+ end
36
+ end