foreman_openscap 8.0.2 → 9.0.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.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -1
  3. data/app/services/foreman_openscap/client_config/ansible.rb +1 -10
  4. data/config/initializers/inflections.rb +0 -2
  5. data/config/routes.rb +0 -15
  6. data/db/migrate/20240313111822_drop_oval.rb +17 -0
  7. data/lib/foreman_openscap/engine.rb +2 -56
  8. data/lib/foreman_openscap/version.rb +1 -1
  9. data/test/factories/compliance_host_factory.rb +0 -12
  10. data/test/test_plugin_helper.rb +0 -2
  11. data/webpack/global_index.js +0 -4
  12. metadata +7 -168
  13. data/app/controllers/api/v2/compliance/oval_contents_controller.rb +0 -72
  14. data/app/controllers/api/v2/compliance/oval_policies_controller.rb +0 -111
  15. data/app/controllers/api/v2/compliance/oval_reports_controller.rb +0 -47
  16. data/app/controllers/concerns/foreman/controller/parameters/oval_content.rb +0 -22
  17. data/app/controllers/concerns/foreman/controller/parameters/oval_policy.rb +0 -22
  18. data/app/graphql/mutations/oval_contents/delete.rb +0 -9
  19. data/app/graphql/mutations/oval_policies/create.rb +0 -33
  20. data/app/graphql/mutations/oval_policies/delete.rb +0 -9
  21. data/app/graphql/mutations/oval_policies/update.rb +0 -15
  22. data/app/graphql/types/cve.rb +0 -17
  23. data/app/graphql/types/oval_check.rb +0 -11
  24. data/app/graphql/types/oval_content.rb +0 -19
  25. data/app/graphql/types/oval_policy.rb +0 -24
  26. data/app/models/concerns/foreman_openscap/oval_facet_host_extensions.rb +0 -38
  27. data/app/models/concerns/foreman_openscap/oval_facet_hostgroup_extensions.rb +0 -31
  28. data/app/models/foreman_openscap/cve.rb +0 -23
  29. data/app/models/foreman_openscap/host/oval_facet.rb +0 -14
  30. data/app/models/foreman_openscap/host_cve.rb +0 -7
  31. data/app/models/foreman_openscap/hostgroup/oval_facet.rb +0 -14
  32. data/app/models/foreman_openscap/hostgroup_oval_facet_oval_policy.rb +0 -6
  33. data/app/models/foreman_openscap/oval_content.rb +0 -28
  34. data/app/models/foreman_openscap/oval_facet_oval_policy.rb +0 -6
  35. data/app/models/foreman_openscap/oval_policy.rb +0 -54
  36. data/app/models/foreman_openscap/oval_status.rb +0 -45
  37. data/app/services/foreman_openscap/oval/check_collection.rb +0 -45
  38. data/app/services/foreman_openscap/oval/configure.rb +0 -83
  39. data/app/services/foreman_openscap/oval/cves.rb +0 -41
  40. data/app/services/foreman_openscap/oval/setup.rb +0 -93
  41. data/app/services/foreman_openscap/oval/setup_check.rb +0 -58
  42. data/app/services/foreman_openscap/oval/sync_oval_contents.rb +0 -42
  43. data/app/views/api/v2/compliance/oval_contents/base.json.rabl +0 -6
  44. data/app/views/api/v2/compliance/oval_contents/create.json.rabl +0 -3
  45. data/app/views/api/v2/compliance/oval_contents/destroy.json.rabl +0 -3
  46. data/app/views/api/v2/compliance/oval_contents/index.json.rabl +0 -3
  47. data/app/views/api/v2/compliance/oval_contents/show.json.rabl +0 -3
  48. data/app/views/api/v2/compliance/oval_contents/sync.json.rabl +0 -3
  49. data/app/views/api/v2/compliance/oval_contents/sync_result.json.rabl +0 -11
  50. data/app/views/api/v2/compliance/oval_contents/update.json.rabl +0 -3
  51. data/app/views/api/v2/compliance/oval_policies/create.json.rabl +0 -3
  52. data/app/views/api/v2/compliance/oval_policies/index.json.rabl +0 -3
  53. data/app/views/api/v2/compliance/oval_policies/main.json.rabl +0 -15
  54. data/app/views/api/v2/compliance/oval_policies/show.json.rabl +0 -3
  55. data/app/views/job_templates/run_oval_scans.erb +0 -24
  56. data/locale/cs_CZ/foreman_openscap.edit.po +0 -1863
  57. data/locale/cs_CZ/foreman_openscap.po.time_stamp +0 -0
  58. data/locale/de/foreman_openscap.edit.po +0 -1873
  59. data/locale/de/foreman_openscap.po.time_stamp +0 -0
  60. data/locale/en/foreman_openscap.edit.po +0 -1863
  61. data/locale/en/foreman_openscap.po.time_stamp +0 -0
  62. data/locale/en_GB/foreman_openscap.edit.po +0 -1863
  63. data/locale/en_GB/foreman_openscap.po.time_stamp +0 -0
  64. data/locale/es/foreman_openscap.edit.po +0 -1868
  65. data/locale/es/foreman_openscap.po.time_stamp +0 -0
  66. data/locale/fr/foreman_openscap.edit.po +0 -1874
  67. data/locale/fr/foreman_openscap.po.time_stamp +0 -0
  68. data/locale/gl/foreman_openscap.edit.po +0 -1863
  69. data/locale/gl/foreman_openscap.po.time_stamp +0 -0
  70. data/locale/it/foreman_openscap.edit.po +0 -1865
  71. data/locale/it/foreman_openscap.po.time_stamp +0 -0
  72. data/locale/ja/foreman_openscap.edit.po +0 -1869
  73. data/locale/ja/foreman_openscap.po.time_stamp +0 -0
  74. data/locale/ka/foreman_openscap.edit.po +0 -1863
  75. data/locale/ka/foreman_openscap.po.time_stamp +0 -0
  76. data/locale/ko/foreman_openscap.edit.po +0 -1863
  77. data/locale/ko/foreman_openscap.po.time_stamp +0 -0
  78. data/locale/pt_BR/foreman_openscap.edit.po +0 -1873
  79. data/locale/pt_BR/foreman_openscap.po.time_stamp +0 -0
  80. data/locale/ru/foreman_openscap.edit.po +0 -1867
  81. data/locale/ru/foreman_openscap.po.time_stamp +0 -0
  82. data/locale/sv_SE/foreman_openscap.edit.po +0 -1863
  83. data/locale/sv_SE/foreman_openscap.po.time_stamp +0 -0
  84. data/locale/zh_CN/foreman_openscap.edit.po +0 -1868
  85. data/locale/zh_CN/foreman_openscap.po.time_stamp +0 -0
  86. data/locale/zh_TW/foreman_openscap.edit.po +0 -1864
  87. data/locale/zh_TW/foreman_openscap.po.time_stamp +0 -0
  88. data/test/factories/oval_content_factory.rb +0 -7
  89. data/test/factories/oval_policy_factory.rb +0 -9
  90. data/test/fixtures/cve_fixtures.rb +0 -104
  91. data/test/functional/api/v2/compliance/oval_contents_controller_test.rb +0 -39
  92. data/test/functional/api/v2/compliance/oval_policies_controller_test.rb +0 -141
  93. data/test/functional/api/v2/compliance/oval_reports_controller_test.rb +0 -32
  94. data/test/graphql/mutations/oval_policies/delete_mutation_test.rb +0 -63
  95. data/test/graphql/queries/oval_content_query_test.rb +0 -29
  96. data/test/graphql/queries/oval_contents_query_test.rb +0 -35
  97. data/test/graphql/queries/oval_policies_query_test.rb +0 -35
  98. data/test/unit/oval_host_test.rb +0 -45
  99. data/test/unit/oval_policy_test.rb +0 -133
  100. data/test/unit/oval_status_test.rb +0 -47
  101. data/test/unit/services/oval/cves_test.rb +0 -81
  102. data/test/unit/services/oval/setup_check_test.rb +0 -37
  103. data/test/unit/services/oval/setup_test.rb +0 -87
  104. data/webpack/graphql/mutations/createOvalPolicy.gql +0 -22
  105. data/webpack/graphql/mutations/deleteOvalContent.gql +0 -9
  106. data/webpack/graphql/mutations/deleteOvalPolicy.gql +0 -9
  107. data/webpack/graphql/mutations/updateOvalPolicy.gql +0 -14
  108. data/webpack/graphql/queries/currentUserAttributes.gql +0 -11
  109. data/webpack/graphql/queries/cves.gql +0 -23
  110. data/webpack/graphql/queries/hostgroups.gql +0 -14
  111. data/webpack/graphql/queries/ovalContent.gql +0 -8
  112. data/webpack/graphql/queries/ovalContents.gql +0 -19
  113. data/webpack/graphql/queries/ovalPolicies.gql +0 -20
  114. data/webpack/graphql/queries/ovalPolicy.gql +0 -29
  115. data/webpack/helpers/pathsHelper.js +0 -29
  116. data/webpack/routes/OvalContents/OvalContentsIndex/OvalContentsIndex.js +0 -71
  117. data/webpack/routes/OvalContents/OvalContentsIndex/OvalContentsTable.js +0 -83
  118. data/webpack/routes/OvalContents/OvalContentsIndex/__tests__/OvalContentsDestroy.fixtures.js +0 -105
  119. data/webpack/routes/OvalContents/OvalContentsIndex/__tests__/OvalContentsDestroy.test.js +0 -124
  120. data/webpack/routes/OvalContents/OvalContentsIndex/__tests__/OvalContentsIndex.fixtures.js +0 -127
  121. data/webpack/routes/OvalContents/OvalContentsIndex/__tests__/OvalContentsIndex.test.js +0 -89
  122. data/webpack/routes/OvalContents/OvalContentsIndex/index.js +0 -13
  123. data/webpack/routes/OvalContents/OvalContentsNew/OvalContentsNew.js +0 -138
  124. data/webpack/routes/OvalContents/OvalContentsNew/OvalContentsNew.scss +0 -3
  125. data/webpack/routes/OvalContents/OvalContentsNew/OvalContentsNewHelper.js +0 -73
  126. data/webpack/routes/OvalContents/OvalContentsNew/__tests__/OvalContentsNew.test.js +0 -104
  127. data/webpack/routes/OvalContents/OvalContentsNew/index.js +0 -13
  128. data/webpack/routes/OvalContents/OvalContentsShow/OvalContentsShow.js +0 -62
  129. data/webpack/routes/OvalContents/OvalContentsShow/OvalContentsShow.test.js +0 -45
  130. data/webpack/routes/OvalContents/OvalContentsShow/OvalContentsShowHelper.js +0 -0
  131. data/webpack/routes/OvalContents/OvalContentsShow/index.js +0 -35
  132. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/OvalPoliciesIndex.js +0 -62
  133. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/OvalPoliciesTable.js +0 -74
  134. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/__tests__/OvalPoliciesDestroy.fixtures.js +0 -101
  135. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/__tests__/OvalPoliciesDestroy.test.js +0 -117
  136. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/__tests__/OvalPoliciesIndex.fixtures.js +0 -111
  137. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/__tests__/OvalPoliciesIndex.test.js +0 -81
  138. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/index.js +0 -13
  139. data/webpack/routes/OvalPolicies/OvalPoliciesNew/HostgroupSelect.js +0 -135
  140. data/webpack/routes/OvalPolicies/OvalPoliciesNew/NewOvalPolicyForm.js +0 -119
  141. data/webpack/routes/OvalPolicies/OvalPoliciesNew/NewOvalPolicyFormHelpers.js +0 -107
  142. data/webpack/routes/OvalPolicies/OvalPoliciesNew/OvalPoliciesNew.js +0 -32
  143. data/webpack/routes/OvalPolicies/OvalPoliciesNew/__tests__/OvalPoliciesNew.fixtures.js +0 -147
  144. data/webpack/routes/OvalPolicies/OvalPoliciesNew/__tests__/OvalPoliciesNew.test.js +0 -172
  145. data/webpack/routes/OvalPolicies/OvalPoliciesNew/index.js +0 -11
  146. data/webpack/routes/OvalPolicies/OvalPoliciesShow/CvesTab.js +0 -49
  147. data/webpack/routes/OvalPolicies/OvalPoliciesShow/CvesTable.js +0 -63
  148. data/webpack/routes/OvalPolicies/OvalPoliciesShow/DetailsTab.js +0 -87
  149. data/webpack/routes/OvalPolicies/OvalPoliciesShow/HostgroupsTab.js +0 -49
  150. data/webpack/routes/OvalPolicies/OvalPoliciesShow/HostgroupsTable.js +0 -38
  151. data/webpack/routes/OvalPolicies/OvalPoliciesShow/OvalPoliciesShow.js +0 -82
  152. data/webpack/routes/OvalPolicies/OvalPoliciesShow/OvalPoliciesShowHelper.js +0 -117
  153. data/webpack/routes/OvalPolicies/OvalPoliciesShow/__tests__/OvalPoliciesEdit.fixtures.js +0 -48
  154. data/webpack/routes/OvalPolicies/OvalPoliciesShow/__tests__/OvalPoliciesEdit.test.js +0 -202
  155. data/webpack/routes/OvalPolicies/OvalPoliciesShow/__tests__/OvalPoliciesShow.fixtures.js +0 -124
  156. data/webpack/routes/OvalPolicies/OvalPoliciesShow/__tests__/OvalPoliciesShow.test.js +0 -172
  157. data/webpack/routes/OvalPolicies/OvalPoliciesShow/index.js +0 -39
  158. data/webpack/routes/routes.js +0 -49
@@ -1,72 +0,0 @@
1
- module Api::V2
2
- module Compliance
3
- class OvalContentsController < ::Api::V2::BaseController
4
- include Foreman::Controller::Parameters::OvalContent
5
- include ForemanOpenscap::Api::V2::ScapApiControllerExtensions
6
-
7
- before_action :find_resource, :except => %w[index create sync]
8
- skip_before_action :check_media_type, :only => %w[create update]
9
-
10
- api :GET, '/compliance/oval_contents', N_('List OVAL contents')
11
- param_group :search_and_pagination, ::Api::V2::BaseController
12
- add_scoped_search_description_for(::ForemanOpenscap::OvalContent)
13
-
14
- def index
15
- @oval_contents = resource_scope_for_index(:permission => :view_oval_contents)
16
- end
17
-
18
- api :GET, '/compliance/oval_contents/:id', N_('Show an OVAL content')
19
- param :id, :identifier, :required => true
20
-
21
- def show
22
- end
23
-
24
- def_param_group :oval_content do
25
- param :oval_content, Hash, :required => true, :action_aware => true do
26
- param :name, String, :required => true, :desc => N_('OVAL content name')
27
- param :scap_file, File, :desc => N_('XML containing OVAL content')
28
- param :original_filename, String, :desc => N_('Original file name of the OVAL content file')
29
- param :url, String, :desc => N_('URL of the OVAL content file')
30
- param_group :taxonomies, ::Api::V2::BaseController
31
- end
32
- end
33
-
34
- api :POST, '/compliance/oval_contents', N_('Create OVAL content')
35
- param_group :oval_content, :as => :create
36
-
37
- def create
38
- @oval_content = ForemanOpenscap::OvalContent.new(oval_content_params)
39
- process_response @oval_content.save
40
- end
41
-
42
- api :PUT, '/compliance/oval_contents/:id', N_('Update an OVAL content')
43
- param :id, :identifier, :required => true
44
- param_group :oval_content
45
-
46
- def update
47
- process_response @oval_content.update(oval_content_params)
48
- end
49
-
50
- api :DELETE, '/compliance/oval_contents/:id', N_('Deletes an OVAL content')
51
- param :id, :identifier, :required => true
52
-
53
- def destroy
54
- process_response @oval_content.destroy
55
- end
56
-
57
- api :POST, '/compliance/oval_contents/sync', N_('Sync contents that have remote source URL')
58
- def sync
59
- @oval_contents = ForemanOpenscap::Oval::SyncOvalContents.new.sync_all
60
- end
61
-
62
- def action_permission
63
- case params[:action]
64
- when 'sync'
65
- :update
66
- else
67
- super
68
- end
69
- end
70
- end
71
- end
72
- end
@@ -1,111 +0,0 @@
1
- module Api::V2
2
- module Compliance
3
- class OvalPoliciesController < ::Api::V2::BaseController
4
- include Foreman::Controller::SmartProxyAuth
5
- include ForemanOpenscap::Api::V2::ScapApiControllerExtensions
6
- include Foreman::Controller::Parameters::OvalPolicy
7
-
8
- add_smart_proxy_filters %i[oval_content], :features => 'Openscap'
9
-
10
- before_action :find_resource, :except => %w[index create]
11
- skip_after_action :log_response_body, :only => %i[oval_content]
12
-
13
- api :GET, '/compliance/oval_policies', N_('List OVAL Policies')
14
- param_group :search_and_pagination, ::Api::V2::BaseController
15
-
16
- def index
17
- @oval_policies = resource_scope_for_index(:permission => :view_oval_policies)
18
- end
19
-
20
- api :GET, '/compliance/oval_policies/:id', N_('Show an OVAL Policy')
21
- param :id, :identifier, :required => true
22
-
23
- def show
24
- end
25
-
26
- def_param_group :oval_policy do
27
- param :oval_policy, Hash, :required => true, :action_aware => true do
28
- param :name, String, :required => true, :desc => N_('OVAL Policy name')
29
- param :oval_content_id, Integer, :required => true, :desc => N_('Policy OVAL content ID')
30
- param :description, String, :desc => N_('OVAL Policy description')
31
- param :period, String, :desc => N_('OVAL Policy schedule period (weekly, monthly, custom)')
32
- param :weekday, String, :desc => N_('OVAL Policy schedule weekday (only if period == "weekly")')
33
- param :day_of_month, Integer, :desc => N_('OVAL Policy schedule day of month (only if period == "monthly")')
34
- param :cron_line, String, :desc => N_('OVAL Policy schedule cron line (only if period == "custom")')
35
- param_group :taxonomies, ::Api::V2::BaseController
36
- end
37
- end
38
-
39
- api :POST, '/compliance/oval_policies', N_('Create an OVAL Policy')
40
- param_group :oval_policy, :as => :create
41
-
42
- def create
43
- @oval_policy = ForemanOpenscap::OvalPolicy.new(oval_policy_params)
44
- process_response(@oval_policy.save)
45
- end
46
-
47
- api :PUT, '/compliance/oval_policies/:id', N_('Update an OVAL Policy')
48
- param :id, :identifier, :required => true
49
- param_group :oval_policy
50
-
51
- def update
52
- process_response(@oval_policy.update(oval_policy_params))
53
- end
54
-
55
- api :DELETE, '/compliance/oval_policies/:id', N_('Delete an OVAL Policy')
56
- param :id, :identifier, :required => true
57
-
58
- def destroy
59
- process_response @oval_policy.destroy
60
- end
61
-
62
- api :POST, '/compliance/oval_policies/:id/assign_hostgroups', N_('Assign hostgroups to an OVAL Policy')
63
- param :id, :identifier, :required => true
64
- param :hostgroup_ids, Array, :desc => N_('Array of hostgroup IDs')
65
-
66
- def assign_hostgroups
67
- assign _('hostgroups'), params["hostgroup_ids"], ::Hostgroup
68
- end
69
-
70
- api :POST, '/compliance/oval_policies/:id/assign_hosts', N_('Assign hosts to an OVAL Policy')
71
- param :id, :identifier, :required => true
72
- param :host_ids, Array, :desc => N_('Array of host IDs')
73
-
74
- def assign_hosts
75
- assign _('hosts'), params["host_ids"], ::Host::Managed
76
- end
77
-
78
- api :GET, '/compliance/oval_policies/:id/oval_content', N_("Show a policy's OVAL content")
79
- param :id, :identifier, :required => true
80
-
81
- def oval_content
82
- @oval_content = @oval_policy.oval_content
83
- send_data @oval_content.scap_file,
84
- :type => 'application/x-bzip2',
85
- :filename => @oval_content.original_filename
86
- end
87
-
88
- def action_permission
89
- case params[:action]
90
- when 'assign_hostgroups', 'assign_hosts'
91
- :edit
92
- when 'oval_content'
93
- :show
94
- else
95
- super
96
- end
97
- end
98
-
99
- private
100
-
101
- def assign(resource_plural, ids, model_class)
102
- check_collection = ::ForemanOpenscap::Oval::Configure.new.assign(@oval_policy, ids, model_class)
103
- if check_collection.all_passed?
104
- render :json => { :message => (_("OVAL policy successfully configured with %s.") % resource_plural) }
105
- else
106
- render :json => { :results => check_collection.find_failed.map(&:to_h) }
107
- end
108
- end
109
- end
110
- end
111
- end
@@ -1,47 +0,0 @@
1
- module Api
2
- module V2
3
- module Compliance
4
- class OvalReportsController < ::Api::V2::BaseController
5
- include Foreman::Controller::SmartProxyAuth
6
- add_smart_proxy_filters :create, :features => 'Openscap'
7
-
8
- skip_before_action :setup_has_many_params
9
- before_action :find_resources_before_create, :only => [:create]
10
-
11
- api :POST, "/compliance/oval_reports/:cname/:oval_policy_id/:date", N_("Upload an OVAL report - a list of CVEs for given host")
12
- param :cname, :identifier, :required => true
13
- param :oval_policy_id, :identifier, :required => true
14
- param :date, :identifier, :required => true
15
-
16
- def create
17
- ForemanOpenscap::Oval::Cves.new.create(@host, params.to_unsafe_h)
18
- if @host.errors.any?
19
- upload_fail @host.errors.full_messages
20
- else
21
- @host.refresh_statuses([ForemanOpenscap::OvalStatus])
22
- render :json => { :result => :ok }
23
- end
24
- end
25
-
26
- private
27
-
28
- def find_resources_before_create
29
- @host = ForemanOpenscap::Helper.find_host_by_name_or_uuid params[:cname]
30
-
31
- unless @host
32
- upload_fail(_('Could not find host identified by: %s') % params[:cname])
33
- return
34
- end
35
- end
36
-
37
- def upload_fail(msg)
38
- logger.error msg
39
- render :json => { :result => :fail, :errors => msg }, :status => :unprocessable_entity
40
- end
41
-
42
- def find_resource
43
- end
44
- end
45
- end
46
- end
47
- end
@@ -1,22 +0,0 @@
1
- module Foreman::Controller::Parameters::OvalContent
2
- extend ActiveSupport::Concern
3
-
4
- class_methods do
5
- def oval_content_params_filter
6
- Foreman::ParameterFilter.new(::ForemanOpenscap::OvalContent).tap do |filter|
7
- filter.permit :original_filename, :scap_file, :name, :url, :location_ids => [], :organization_ids => []
8
- end
9
- end
10
- end
11
-
12
- def oval_content_params
13
- read_file_content self.class.oval_content_params_filter.filter_params(params, parameter_filter_context)
14
- end
15
-
16
- def read_file_content(params)
17
- return params unless file = params[:scap_file]
18
- content = file.read
19
- filename = file.original_filename
20
- params.merge(:scap_file => content, :original_filename => params[:original_filename] || filename)
21
- end
22
- end
@@ -1,22 +0,0 @@
1
- module Foreman::Controller::Parameters::OvalPolicy
2
- extend ActiveSupport::Concern
3
-
4
- class_methods do
5
- def filter_params_list
6
- [:description, :name, :period,
7
- :weekday, :day_of_month, :cron_line,
8
- :oval_content_id,
9
- :location_ids => [], :organization_ids => []]
10
- end
11
-
12
- def oval_policy_params_filter
13
- Foreman::ParameterFilter.new(::ForemanOpenscap::OvalPolicy).tap do |filter|
14
- filter.permit filter_params_list
15
- end
16
- end
17
- end
18
-
19
- def oval_policy_params
20
- self.class.oval_policy_params_filter.filter_params(params, parameter_filter_context)
21
- end
22
- end
@@ -1,9 +0,0 @@
1
- module Mutations
2
- module OvalContents
3
- class Delete < DeleteMutation
4
- graphql_name 'DeleteOvalContentMutation'
5
- description 'Deletes an OVAL Content'
6
- resource_class ::ForemanOpenscap::OvalContent
7
- end
8
- end
9
- end
@@ -1,33 +0,0 @@
1
- module Mutations
2
- module OvalPolicies
3
- class Create < ::Mutations::BaseMutation
4
- description 'Creates a new OVAL Policy'
5
- graphql_name 'CreateOvalPolicyMutation'
6
-
7
- resource_class ::ForemanOpenscap::OvalPolicy
8
-
9
- argument :name, String
10
- argument :description, String, required: false
11
- argument :period, String
12
- argument :weekday, String, required: false
13
- argument :day_of_month, Integer, required: false
14
- argument :cron_line, String, required: false
15
- argument :oval_content_id, Integer, required: true
16
- argument :hostgroup_ids, [Integer], required: false
17
-
18
- field :oval_policy, Types::OvalPolicy, 'The new OVAL Policy.', null: true
19
- field :check_collection, [Types::OvalCheck], 'A collection of checks to detect OVAL policy configuration error', null: false
20
-
21
- def resolve(hostgroup_ids:, **params)
22
- policy = ::ForemanOpenscap::OvalPolicy.new params
23
- validate_object(policy)
24
- authorize!(policy, :create)
25
- check_collection = ::ForemanOpenscap::Oval::Configure.new.assign(policy, hostgroup_ids, ::Hostgroup)
26
- {
27
- :oval_policy => policy,
28
- :check_collection => check_collection.checks
29
- }
30
- end
31
- end
32
- end
33
- end
@@ -1,9 +0,0 @@
1
- module Mutations
2
- module OvalPolicies
3
- class Delete < DeleteMutation
4
- graphql_name 'DeleteOvalPolicyMutation'
5
- description 'Deletes an OVAL Policy'
6
- resource_class ::ForemanOpenscap::OvalPolicy
7
- end
8
- end
9
- end
@@ -1,15 +0,0 @@
1
- module Mutations
2
- module OvalPolicies
3
- class Update < UpdateMutation
4
- graphql_name 'UpdateOvalPolicyMutation'
5
- description 'Updates an OVAL Policy'
6
- resource_class ::ForemanOpenscap::OvalPolicy
7
-
8
- argument :name, String, required: false
9
- argument :description, String, required: false
10
- argument :cron_line, String, required: false
11
-
12
- field :oval_policy, ::Types::OvalPolicy, 'The OVAL policy.', null: true
13
- end
14
- end
15
- end
@@ -1,17 +0,0 @@
1
- module Types
2
- class Cve < BaseObject
3
- description 'A CVE'
4
- model_class ::ForemanOpenscap::Cve
5
-
6
- global_id_field :id
7
- field :ref_id, String
8
- field :ref_url, String
9
- field :has_errata, Boolean
10
- field :definition_id, String
11
- has_many :hosts, Types::Host
12
-
13
- def self.graphql_definition
14
- super.tap { |type| type.instance_variable_set(:@name, 'ForemanOpenscap::Cve') }
15
- end
16
- end
17
- end
@@ -1,11 +0,0 @@
1
- module Types
2
- class OvalCheck < GraphQL::Schema::Object
3
- description 'A check that contains information about whether a particual prerequisite for OVAL policy deployment is configured correctly'
4
-
5
- field :id, String, null: false
6
- field :title, String, null: false
7
- field :fail_msg, String, null: true
8
- field :errors, ::Types::RawJson, null: true
9
- field :result, String, null: false
10
- end
11
- end
@@ -1,19 +0,0 @@
1
- module Types
2
- class OvalContent < BaseObject
3
- description 'An OVAL Content'
4
- model_class ::ForemanOpenscap::OvalContent
5
-
6
- include ::Types::Concerns::MetaField
7
-
8
- global_id_field :id
9
- timestamps
10
- field :name, String
11
- field :digest, String
12
- field :original_filename, String
13
- field :url, String
14
-
15
- def self.graphql_definition
16
- super.tap { |type| type.instance_variable_set(:@name, 'ForemanOpenscap::OvalContent') }
17
- end
18
- end
19
- end
@@ -1,24 +0,0 @@
1
- module Types
2
- class OvalPolicy < BaseObject
3
- description 'An OVAL Policy'
4
- model_class ::ForemanOpenscap::OvalPolicy
5
-
6
- include ::Types::Concerns::MetaField
7
-
8
- global_id_field :id
9
- timestamps
10
- field :name, String
11
- field :description, String
12
- field :period, String
13
- field :weekday, String
14
- field :day_of_month, String
15
- field :cron_line, String
16
- belongs_to :oval_content, ::Types::OvalContent
17
-
18
- has_many :hostgroups, ::Types::Hostgroup
19
-
20
- def self.graphql_definition
21
- super.tap { |type| type.instance_variable_set(:@name, 'ForemanOpenscap::OvalPolicy') }
22
- end
23
- end
24
- end
@@ -1,38 +0,0 @@
1
- module ForemanOpenscap
2
- module OvalFacetHostExtensions
3
- extend ActiveSupport::Concern
4
-
5
- ::Host::Managed::Jail.allow :oval_policies_enc, :oval_policies_enc_raw, :cves, :cves_without_errata
6
-
7
- included do
8
- has_many :oval_policies, :through => :oval_facet, :class_name => 'ForemanOpenscap::OvalPolicy'
9
-
10
- has_many :host_cves, :class_name => 'ForemanOpenscap::HostCve', :foreign_key => :host_id
11
- has_many :cves, :through => :host_cves, :class_name => 'ForemanOpenscap::Cve', :source => :cve
12
-
13
- scoped_search :relation => :host_cves, :on => :cve_id, :rename => :cve_id, :complete_value => false
14
- end
15
-
16
- def cves_without_errata
17
- cves.where(:has_errata => false)
18
- end
19
-
20
- def cves_with_errata
21
- cves.where(:has_errata => true)
22
- end
23
-
24
- def combined_oval_policies
25
- combined = oval_policies
26
- combined += hostgroup.oval_policies + hostgroup.inherited_oval_policies if hostgroup
27
- combined.uniq
28
- end
29
-
30
- def oval_policies_enc_raw
31
- combined_oval_policies.map(&:to_enc)
32
- end
33
-
34
- def oval_policies_enc
35
- oval_policies_enc_raw.to_json
36
- end
37
- end
38
- end
@@ -1,31 +0,0 @@
1
- module ForemanOpenscap
2
- module OvalFacetHostgroupExtensions
3
- extend ActiveSupport::Concern
4
-
5
- include InheritedPolicies
6
-
7
- included do
8
- has_many :oval_policies, :through => :oval_facet, :class_name => 'ForemanOpenscap::OvalPolicy'
9
-
10
- scoped_search :relation => :oval_policies,
11
- :on => :id,
12
- :rename => :oval_policy_id,
13
- :complete_value => false,
14
- :only_explicit => true,
15
- :ext_method => :find_by_oval_policy_id,
16
- :operators => ['= ']
17
- end
18
-
19
- def inherited_oval_policies
20
- find_inherited_policies :oval_policies
21
- end
22
-
23
- module ClassMethods
24
- def find_by_oval_policy_id(_key, operator, value)
25
- conditions = sanitize_sql_for_conditions(["#{::ForemanOpenscap::HostgroupOvalFacetOvalPolicy.table_name}.oval_policy_id #{operator} ?", value])
26
- hg_ids = ::ForemanOpenscap::Hostgroup::OvalFacet.joins(:hostgroup_oval_facet_oval_policies).where(conditions).pluck(:hostgroup_id)
27
- { :conditions => ::Hostgroup.arel_table[:id].in(hg_ids).to_sql }
28
- end
29
- end
30
- end
31
- end
@@ -1,23 +0,0 @@
1
- module ForemanOpenscap
2
- class Cve < ApplicationRecord
3
- has_many :host_cves
4
- has_many :hosts, :through => :host_cves
5
- has_many :oval_policies, :through => :host_cves
6
-
7
- scoped_search :relation => :host_cves, :on => :oval_policy_id, :rename => :oval_policy_id, :complete_value => false
8
-
9
- scope :of_oval_policy, ->(policy_id) {
10
- joins(:host_cves).where(:foreman_openscap_host_cves => { :oval_policy_id => policy_id })
11
- }
12
-
13
- scope :of_host, ->(host_id) {
14
- joins(:host_cves).where(:foreman_openscap_host_cves => { :host_id => host_id })
15
- }
16
-
17
- validates :ref_id, :ref_url, :definition_id, :presence => true
18
-
19
- class Jail < ::Safemode::Jail
20
- allow :ref_id, :ref_url
21
- end
22
- end
23
- end
@@ -1,14 +0,0 @@
1
- module ForemanOpenscap
2
- module Host
3
- class OvalFacet < ApplicationRecord
4
- self.table_name = 'foreman_openscap_oval_facets'
5
-
6
- include Facets::Base
7
-
8
- validates :host, :presence => true, :allow_blank => false
9
-
10
- has_many :oval_facet_oval_policies, :dependent => :destroy, :class_name => 'ForemanOpenscap::OvalFacetOvalPolicy'
11
- has_many :oval_policies, :through => :oval_facet_oval_policies, :class_name => 'ForemanOpenscap::OvalPolicy'
12
- end
13
- end
14
- end
@@ -1,7 +0,0 @@
1
- module ForemanOpenscap
2
- class HostCve < ApplicationRecord
3
- belongs_to_host
4
- belongs_to :cve
5
- belongs_to :oval_policy
6
- end
7
- end
@@ -1,14 +0,0 @@
1
- module ForemanOpenscap
2
- module Hostgroup
3
- class OvalFacet < ApplicationRecord
4
- self.table_name = 'foreman_openscap_hostgroup_oval_facets'
5
-
6
- include Facets::HostgroupFacet
7
-
8
- validates :hostgroup, :presence => true, :allow_blank => false
9
-
10
- has_many :hostgroup_oval_facet_oval_policies, :dependent => :destroy, :class_name => 'ForemanOpenscap::HostgroupOvalFacetOvalPolicy'
11
- has_many :oval_policies, :through => :hostgroup_oval_facet_oval_policies, :class_name => 'ForemanOpenscap::OvalPolicy'
12
- end
13
- end
14
- end
@@ -1,6 +0,0 @@
1
- module ForemanOpenscap
2
- class HostgroupOvalFacetOvalPolicy < ApplicationRecord
3
- belongs_to :oval_policy
4
- belongs_to :oval_facet, :class_name => 'ForemanOpenscap::Hostgroup::OvalFacet'
5
- end
6
- end
@@ -1,28 +0,0 @@
1
- module ForemanOpenscap
2
- class OvalContent < ApplicationRecord
3
- audited :except => [:scap_file]
4
- include Authorizable
5
- include Taxonomix
6
- include ScapFileContent
7
-
8
- before_destroy EnsureNotUsedBy.new(:oval_policies)
9
-
10
- scoped_search :on => :name, :complete_value => true
11
-
12
- has_many :oval_policies
13
- validates :name, :presence => true, :length => { :maximum => 255 }, uniqueness: true
14
- validates :url, :format => { :with => %r{\Ahttps?://} }, :allow_blank => true
15
-
16
- before_validation :fetch_remote_content, :if => lambda { |oval_content| oval_content.url.present? }
17
-
18
- def to_h
19
- { :id => id, :name => name, :original_filename => original_filename, :changed_at => changed_at }
20
- end
21
-
22
- private
23
-
24
- def fetch_remote_content
25
- ForemanOpenscap::Oval::SyncOvalContents.new.sync self
26
- end
27
- end
28
- end
@@ -1,6 +0,0 @@
1
- module ForemanOpenscap
2
- class OvalFacetOvalPolicy < ApplicationRecord
3
- belongs_to :oval_policy
4
- belongs_to :oval_facet, :class_name => 'ForemanOpenscap::Host::OvalFacet'
5
- end
6
- end
@@ -1,54 +0,0 @@
1
- module ForemanOpenscap
2
- class OvalPolicy < ApplicationRecord
3
- graphql_type '::Types::OvalPolicy'
4
-
5
- audited
6
- include Authorizable
7
- include Taxonomix
8
-
9
- include PolicyCommon
10
-
11
- belongs_to :oval_content
12
-
13
- validates :name, :presence => true, :uniqueness => true, :length => { :maximum => 255 }
14
- validates :period, :inclusion => { :in => %w[weekly monthly custom], :message => _('is not a valid value') }
15
- validate :valid_cron_line, :valid_weekday, :valid_day_of_month
16
- validates :oval_content, :presence => true
17
-
18
- has_many :oval_facet_oval_policies, :class_name => 'ForemanOpenscap::OvalFacetOvalPolicy'
19
- has_many :oval_facets, :through => :oval_facet_oval_policies, :class_name => 'ForemanOpenscap::Host::OvalFacet'
20
- has_many :hosts, :through => :oval_facets
21
-
22
- has_many :hostgroup_oval_facet_oval_policies, :class_name => 'ForemanOpenscap::HostgroupOvalFacetOvalPolicy'
23
- has_many :hostgroup_oval_facets, :through => :hostgroup_oval_facet_oval_policies, :class_name => 'ForemanOpenscap::Hostgroup::OvalFacet', :source => :oval_facet
24
- has_many :hostgroups, :through => :hostgroup_oval_facets
25
-
26
- has_many :host_cves
27
- has_many :cves, :through => :host_cves
28
-
29
- def host_ids=(host_ids)
30
- self.oval_facets = facets_to_assign(host_ids, :host_id, ForemanOpenscap::Host::OvalFacet)
31
- end
32
-
33
- def hostgroup_ids=(hostgroup_ids)
34
- self.hostgroup_oval_facets = facets_to_assign(hostgroup_ids, :hostgroup_id, ForemanOpenscap::Hostgroup::OvalFacet)
35
- end
36
-
37
- def to_enc
38
- {
39
- :id => id,
40
- :oval_content_path => "/var/lib/openscap/oval_content/#{oval_content.digest}.oval.xml.bz2",
41
- :download_path => "/compliance/oval_policies/#{id}/oval_content/#{oval_content.digest}"
42
- }.merge(period_enc).with_indifferent_access
43
- end
44
-
45
- private
46
-
47
- def facets_to_assign(ids, key, facet_class)
48
- filtered_ids = ids.uniq.reject { |id| respond_to?(:empty) && id.empty? }
49
- existing_facets = facet_class.where(key => filtered_ids)
50
- new_facets = (filtered_ids - existing_facets.pluck(key)).map { |id| facet_class.new(key => id) }
51
- existing_facets + new_facets
52
- end
53
- end
54
- end