katello 3.18.0.rc1 → 4.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of katello might be problematic. Click here for more details.

Files changed (345) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/katello/api/rhsm/candlepin_dynflow_proxy_controller.rb +0 -19
  3. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +1 -3
  4. data/app/controllers/katello/api/v2/api_controller.rb +1 -2
  5. data/app/controllers/katello/api/v2/capsule_content_controller.rb +2 -2
  6. data/app/controllers/katello/api/v2/content_credentials_controller.rb +24 -24
  7. data/app/controllers/katello/api/v2/content_export_incrementals_controller.rb +98 -0
  8. data/app/controllers/katello/api/v2/content_exports_controller.rb +88 -0
  9. data/app/controllers/katello/api/v2/content_imports_controller.rb +59 -0
  10. data/app/controllers/katello/api/v2/content_view_filters_controller.rb +16 -7
  11. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +57 -92
  12. data/app/controllers/katello/api/v2/content_views_controller.rb +12 -3
  13. data/app/controllers/katello/api/v2/host_debs_controller.rb +1 -0
  14. data/app/controllers/katello/api/v2/host_errata_controller.rb +2 -2
  15. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +2 -3
  16. data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +20 -7
  17. data/app/controllers/katello/api/v2/products_bulk_actions_controller.rb +1 -1
  18. data/app/controllers/katello/api/v2/products_controller.rb +9 -9
  19. data/app/controllers/katello/api/v2/repositories_controller.rb +5 -19
  20. data/app/controllers/katello/api/v2/repository_sets_controller.rb +24 -14
  21. data/app/controllers/katello/api/v2/simple_content_access_controller.rb +34 -0
  22. data/app/controllers/katello/api/v2/subscriptions_controller.rb +1 -1
  23. data/app/controllers/katello/api/v2/upstream_subscriptions_controller.rb +8 -4
  24. data/app/controllers/katello/concerns/api/v2/authorization.rb +10 -0
  25. data/app/controllers/katello/concerns/api/v2/bulk_hosts_extensions.rb +22 -18
  26. data/app/controllers/katello/concerns/authorization/api/v2/content_views_controller.rb +1 -1
  27. data/app/controllers/katello/concerns/registration_controller_extensions.rb +16 -0
  28. data/app/helpers/katello/sync_management_helper.rb +0 -2
  29. data/app/lib/actions/candlepin/environment/create.rb +1 -1
  30. data/app/lib/actions/candlepin/environment/set_content.rb +1 -1
  31. data/app/lib/actions/helpers/smart_proxy_sync_history_helper.rb +24 -0
  32. data/app/lib/actions/katello/activation_key/create.rb +9 -11
  33. data/app/lib/actions/katello/applicability/hosts/bulk_generate.rb +6 -2
  34. data/app/lib/actions/katello/capsule_content/sync.rb +8 -8
  35. data/app/lib/actions/katello/capsule_content/sync_capsule.rb +31 -8
  36. data/app/lib/actions/katello/check_matching_content.rb +17 -0
  37. data/app/lib/actions/katello/content_view/environment_create.rb +6 -8
  38. data/app/lib/actions/katello/content_view/promote_to_environment.rb +1 -1
  39. data/app/lib/actions/katello/content_view/publish.rb +6 -5
  40. data/app/lib/actions/katello/content_view_version/import.rb +5 -11
  41. data/app/lib/actions/katello/content_view_version/import_library.rb +17 -0
  42. data/app/lib/actions/katello/content_view_version/incremental_update.rb +30 -10
  43. data/app/lib/actions/katello/host/hypervisors_update.rb +4 -4
  44. data/app/lib/actions/katello/host/update_system_purpose.rb +1 -1
  45. data/app/lib/actions/katello/host/upload_package_profile.rb +3 -1
  46. data/app/lib/actions/katello/host/upload_profiles.rb +8 -6
  47. data/app/lib/actions/katello/organization/create.rb +3 -5
  48. data/app/lib/actions/katello/organization/destroy.rb +1 -1
  49. data/app/lib/actions/katello/organization/manifest_delete.rb +3 -5
  50. data/app/lib/actions/katello/organization/manifest_import.rb +1 -1
  51. data/app/lib/actions/katello/organization/manifest_refresh.rb +1 -1
  52. data/app/lib/actions/katello/repository/check_matching_content.rb +3 -1
  53. data/app/lib/actions/katello/repository/clone_contents.rb +8 -11
  54. data/app/lib/actions/katello/repository/create.rb +0 -8
  55. data/app/lib/actions/katello/repository/filtered_index_content.rb +3 -0
  56. data/app/lib/actions/katello/repository/import_upload.rb +2 -0
  57. data/app/lib/actions/katello/repository/index_content.rb +1 -0
  58. data/app/lib/actions/katello/repository/multi_clone_contents.rb +9 -12
  59. data/app/lib/actions/katello/repository/remove_content.rb +1 -1
  60. data/app/lib/actions/katello/repository/sync.rb +3 -1
  61. data/app/lib/actions/katello/repository/update.rb +1 -8
  62. data/app/lib/actions/katello/repository/upload_files.rb +1 -0
  63. data/app/lib/actions/middleware/execute_if_contents_changed.rb +4 -1
  64. data/app/lib/actions/middleware/record_smart_proxy_sync_history.rb +35 -0
  65. data/app/lib/actions/pulp/consumer/sync_capsule.rb +4 -2
  66. data/app/lib/actions/pulp/orchestration/repository/refresh_repos.rb +0 -6
  67. data/app/lib/actions/pulp/repository/distributor_publish.rb +1 -1
  68. data/app/lib/actions/pulp3/abstract_async_task.rb +1 -0
  69. data/app/lib/actions/pulp3/capsule_content/refresh_distribution.rb +3 -3
  70. data/app/lib/actions/pulp3/capsule_content/sync.rb +1 -0
  71. data/app/lib/actions/pulp3/content_migration.rb +10 -0
  72. data/app/lib/actions/pulp3/content_migration_presenter.rb +59 -0
  73. data/app/lib/actions/pulp3/content_view/delete_repository_references.rb +1 -1
  74. data/app/lib/actions/pulp3/content_view_version/export.rb +6 -1
  75. data/app/lib/actions/pulp3/import_migration.rb +6 -1
  76. data/app/lib/actions/pulp3/orchestration/content_view_version/copy_version_units_to_library.rb +2 -1
  77. data/app/lib/actions/pulp3/orchestration/content_view_version/export.rb +30 -9
  78. data/app/lib/actions/pulp3/orchestration/content_view_version/export_library.rb +60 -0
  79. data/app/lib/actions/pulp3/orchestration/content_view_version/import.rb +0 -4
  80. data/app/lib/actions/pulp3/orchestration/repository/generate_metadata.rb +4 -1
  81. data/app/lib/actions/pulp3/orchestration/repository/import_upload.rb +16 -3
  82. data/app/lib/actions/pulp3/orchestration/repository/refresh_repos.rb +1 -6
  83. data/app/lib/actions/pulp3/repository/copy_content.rb +1 -1
  84. data/app/lib/actions/pulp3/repository/delete.rb +1 -1
  85. data/app/lib/actions/pulp3/repository/save_version.rb +1 -1
  86. data/app/lib/actions/pulp3/repository/upload_tag.rb +18 -0
  87. data/app/lib/katello/concerns/base_template_scope_extensions.rb +8 -0
  88. data/app/lib/katello/event_daemon/monitor.rb +53 -0
  89. data/app/lib/katello/event_daemon/runner.rb +99 -0
  90. data/app/lib/katello/logging.rb +32 -0
  91. data/app/lib/katello/messaging/connection.rb +1 -7
  92. data/app/lib/katello/validators/content_view_puppet_module_validator.rb +1 -1
  93. data/app/models/katello/activation_key.rb +2 -2
  94. data/app/models/katello/authorization/content_view_filter.rb +15 -0
  95. data/app/models/katello/authorization/content_view_version.rb +25 -2
  96. data/app/models/katello/authorization/content_view_version_export_history.rb +1 -1
  97. data/app/models/katello/authorization/organization.rb +8 -0
  98. data/app/models/katello/candlepin/repository_mapper.rb +1 -1
  99. data/app/models/katello/concerns/operatingsystem_extensions.rb +2 -0
  100. data/app/models/katello/concerns/organization_extensions.rb +2 -2
  101. data/app/models/katello/concerns/pulp_database_unit.rb +7 -0
  102. data/app/models/katello/concerns/redhat_extensions.rb +2 -2
  103. data/app/models/katello/concerns/smart_proxy_extensions.rb +33 -5
  104. data/app/models/katello/content_migration_progress.rb +4 -0
  105. data/app/models/katello/content_view.rb +35 -5
  106. data/app/models/katello/content_view_environment.rb +2 -2
  107. data/app/models/katello/content_view_filter.rb +5 -0
  108. data/app/models/katello/content_view_history.rb +2 -1
  109. data/app/models/katello/content_view_package_filter.rb +1 -1
  110. data/app/models/katello/content_view_puppet_environment.rb +2 -2
  111. data/app/models/katello/content_view_puppet_module.rb +8 -0
  112. data/app/models/katello/content_view_repository.rb +13 -1
  113. data/app/models/katello/content_view_version.rb +2 -1
  114. data/app/models/katello/content_view_version_export_history.rb +26 -1
  115. data/app/models/katello/erratum.rb +3 -1
  116. data/app/models/katello/glue/candlepin/pool.rb +2 -0
  117. data/app/models/katello/glue/pulp/repo.rb +0 -6
  118. data/app/models/katello/glue/pulp/repos.rb +1 -22
  119. data/app/models/katello/host/subscription_facet.rb +4 -0
  120. data/app/models/katello/ping.rb +11 -6
  121. data/app/models/katello/pool.rb +5 -0
  122. data/app/models/katello/product.rb +3 -3
  123. data/app/models/katello/repository.rb +36 -3
  124. data/app/models/katello/smart_proxy_sync_history.rb +8 -0
  125. data/app/models/katello/subscription_status.rb +3 -2
  126. data/app/presenters/katello/host_subscription_presenter.rb +3 -4
  127. data/app/presenters/katello/host_subscriptions_presenter.rb +24 -0
  128. data/app/services/katello/applicability/applicable_content_helper.rb +44 -15
  129. data/app/services/katello/candlepin_event_listener.rb +11 -19
  130. data/app/services/katello/event_monitor/poller_thread.rb +2 -11
  131. data/app/services/katello/pulp/smart_proxy_repository.rb +0 -15
  132. data/app/services/katello/pulp3/api/docker.rb +4 -0
  133. data/app/services/katello/pulp3/content_view_version/export.rb +122 -6
  134. data/app/services/katello/pulp3/content_view_version/import.rb +37 -22
  135. data/app/services/katello/pulp3/content_view_version/import_export_common.rb +6 -16
  136. data/app/services/katello/pulp3/content_view_version/import_validator.rb +84 -0
  137. data/app/services/katello/pulp3/docker_manifest.rb +1 -0
  138. data/app/services/katello/pulp3/docker_tag.rb +1 -0
  139. data/app/services/katello/pulp3/migration.rb +51 -10
  140. data/app/services/katello/pulp3/repository.rb +13 -4
  141. data/app/services/katello/pulp3/repository/docker.rb +5 -0
  142. data/app/services/katello/pulp3/repository/yum.rb +15 -10
  143. data/app/services/katello/pulp3/task.rb +7 -3
  144. data/app/services/katello/pulp3/task_group.rb +10 -0
  145. data/app/services/katello/repository_type.rb +3 -2
  146. data/app/services/katello/smart_proxy_helper.rb +9 -0
  147. data/app/views/foreman/hosts/_registration.html.erb +12 -0
  148. data/app/views/foreman/smart_proxies/_content_tab.html.erb +4 -47
  149. data/app/views/foreman/smart_proxies/show.html.erb +1 -1
  150. data/app/views/katello/api/v2/capsule_content/sync_status.json.rabl +22 -25
  151. data/app/views/katello/api/v2/content_view_version_export_histories/show.json.rabl +1 -0
  152. data/app/views/katello/api/v2/content_views/base.json.rabl +1 -0
  153. data/app/views/katello/api/v2/content_views/show.json.rabl +6 -0
  154. data/app/views/katello/api/v2/organizations/show.json.rabl +7 -9
  155. data/app/views/katello/layouts/react.html.erb +3 -2
  156. data/app/views/overrides/activation_keys/_host_tab_pane.html.erb +1 -5
  157. data/app/views/overrides/organizations/_edit_override.html.erb +1 -4
  158. data/app/views/overrides/smart_proxies/_environment_tab.html.erb +1 -1
  159. data/app/views/overrides/smart_proxies/_environment_tab_pane.html.erb +1 -1
  160. data/config/katello.yaml.example +0 -3
  161. data/config/routes/api/v2.rb +31 -13
  162. data/db/migrate/20150930183738_migrate_content_hosts.rb +1 -1
  163. data/db/migrate/20191204214919_add_content_view_version_counts.rb +0 -1
  164. data/db/migrate/20200514092553_move_katello_fields_from_hostgroups.katello.rb +5 -2
  165. data/db/migrate/20200929200357_create_katello_smart_proxy_sync_history.rb +13 -0
  166. data/db/migrate/20201021150008_add_import_only_to_katello_content_view.rb +5 -0
  167. data/db/migrate/20201119211133_pulp3_migration_progress.rb +9 -0
  168. data/db/migrate/20210119162528_delete_puppet_and_ostree_repos.rb +56 -0
  169. data/db/migrate/20210128231228_add_type_and_from_cvv_to_cvv_export_history.rb +14 -0
  170. data/db/migrate/20210201163238_migrate_background_download_policy_to_migrate.rb +7 -0
  171. data/db/seeds.d/104-proxy.rb +1 -1
  172. data/db/seeds.d/111-upgrade_tasks.rb +2 -1
  173. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/capsule-content/capsule-content.controller.js +1 -1
  174. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/common/views/katello-agent-notice.html +1 -1
  175. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-system-purpose-modal.html +35 -40
  176. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-host-register-os-client.directive.js +17 -0
  177. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html +2 -2
  178. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +2 -2
  179. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-client.html +12 -5
  180. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-deb-client.html +38 -0
  181. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-oracle-client.html +5 -0
  182. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-sles-client.html +28 -0
  183. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register.html +14 -11
  184. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.controller.js +6 -2
  185. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-activation-keys.controller.js +8 -3
  186. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-content-hosts.controller.js +9 -3
  187. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-details.controller.js +12 -0
  188. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-filter-details.html +2 -2
  189. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-details.html +7 -7
  190. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-info.html +7 -1
  191. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-publish.html +4 -0
  192. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/content-view-new.controller.js +17 -3
  193. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/views/content-view-new.html +16 -2
  194. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/views/content-views.html +5 -0
  195. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +78 -7
  196. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de.po +17 -20
  197. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/es.po +17 -24
  198. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/fr.po +1292 -1170
  199. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/it.po +17 -20
  200. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ja.po +858 -807
  201. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ko.po +18 -19
  202. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt_BR.po +17 -24
  203. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ru.po +17 -18
  204. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_CN.po +986 -971
  205. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_TW.po +19 -20
  206. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/translations.js +9 -9
  207. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +2 -2
  208. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +1 -1
  209. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/download-policy.service.js +0 -1
  210. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +1 -1
  211. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/repository-types.service.js +8 -1
  212. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.controller.js +2 -2
  213. data/lib/katello/engine.rb +6 -6
  214. data/lib/katello/middleware/event_daemon.rb +1 -1
  215. data/lib/katello/permission_creator.rb +35 -14
  216. data/lib/katello/plugin.rb +8 -3
  217. data/lib/katello/tasks/delete_orphaned_content.rake +1 -3
  218. data/lib/katello/tasks/jenkins.rake +1 -1
  219. data/lib/katello/tasks/pulp3_content_switchover.rake +1 -1
  220. data/lib/katello/tasks/pulp3_migration.rake +18 -6
  221. data/lib/katello/tasks/pulp3_migration_abort.rake +22 -0
  222. data/lib/katello/tasks/pulp3_migration_stats.rake +28 -8
  223. data/lib/katello/tasks/pulp3_post_migration_check.rake +1 -3
  224. data/lib/katello/tasks/receptor/extract_orgs.rake +1 -1
  225. data/lib/katello/tasks/reimport.rake +1 -1
  226. data/lib/katello/tasks/repository.rake +3 -5
  227. data/lib/katello/tasks/upgrades/4.0/remove_ostree_puppet_content.rake +16 -0
  228. data/lib/katello/version.rb +1 -1
  229. data/lib/proxy_api/container_gateway.rb +21 -0
  230. data/locale/action_names.rb +51 -51
  231. data/locale/bn/katello.edit.po +0 -0
  232. data/locale/bn/katello.po +136 -51
  233. data/locale/cs/katello.edit.po +0 -0
  234. data/locale/cs/katello.po +136 -49
  235. data/locale/de/katello.edit.po +0 -0
  236. data/locale/de/katello.po +136 -48
  237. data/locale/en/katello.edit.po +0 -0
  238. data/locale/en/katello.po +136 -48
  239. data/locale/es/katello.edit.po +0 -0
  240. data/locale/es/katello.po +136 -48
  241. data/locale/fr/katello.edit.po +0 -0
  242. data/locale/fr/katello.po +136 -48
  243. data/locale/gu/katello.edit.po +0 -0
  244. data/locale/gu/katello.po +136 -51
  245. data/locale/hi/katello.edit.po +0 -0
  246. data/locale/hi/katello.po +136 -51
  247. data/locale/it/katello.edit.po +0 -0
  248. data/locale/it/katello.po +136 -48
  249. data/locale/ja/katello.edit.po +0 -0
  250. data/locale/ja/katello.po +136 -48
  251. data/locale/katello.pot +941 -767
  252. data/locale/kn/katello.edit.po +0 -0
  253. data/locale/kn/katello.po +136 -51
  254. data/locale/ko/katello.edit.po +0 -0
  255. data/locale/ko/katello.po +136 -48
  256. data/locale/mr/katello.edit.po +0 -0
  257. data/locale/mr/katello.po +136 -51
  258. data/locale/or/katello.edit.po +0 -0
  259. data/locale/or/katello.po +136 -51
  260. data/locale/pa/katello.edit.po +0 -0
  261. data/locale/pa/katello.po +136 -51
  262. data/locale/pt/katello.edit.po +0 -0
  263. data/locale/pt/katello.po +136 -51
  264. data/locale/pt_BR/katello.edit.po +0 -0
  265. data/locale/pt_BR/katello.po +136 -48
  266. data/locale/ru/katello.edit.po +0 -0
  267. data/locale/ru/katello.po +136 -48
  268. data/locale/ta/katello.edit.po +0 -0
  269. data/locale/ta/katello.po +136 -51
  270. data/locale/te/katello.edit.po +0 -0
  271. data/locale/te/katello.po +136 -51
  272. data/locale/zh_CN/katello.edit.po +0 -0
  273. data/locale/zh_CN/katello.po +136 -48
  274. data/locale/zh_TW/katello.edit.po +0 -0
  275. data/locale/zh_TW/katello.po +136 -48
  276. data/package.json +1 -1
  277. data/webpack/__mocks__/foremanReact/Root/Context/ForemanContext.js +0 -1
  278. data/webpack/__mocks__/foremanReact/components/Pagination/PaginationHooks.js +2 -0
  279. data/webpack/__mocks__/foremanReact/components/common/dates/LongDateTime.js +5 -0
  280. data/webpack/{scenes/ContentViews/Details/Repositories → components/SelectableDropdown}/SelectableDropdown.js +20 -3
  281. data/webpack/components/SelectableDropdown/__tests__/SelectableDropdown.test.js +45 -0
  282. data/webpack/components/SelectableDropdown/index.js +3 -0
  283. data/webpack/components/Table/TableWrapper.js +2 -1
  284. data/webpack/components/Table/helpers.js +14 -0
  285. data/webpack/components/TypeAhead/TypeAhead.js +2 -1
  286. data/webpack/components/TypeAhead/pf3Search/TypeAheadSearch.js +2 -1
  287. data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.js +0 -1
  288. data/webpack/containers/Application/overrides.scss +6 -0
  289. data/webpack/index.js +6 -0
  290. data/webpack/redux/actions/RedHatRepositories/helpers.js +5 -5
  291. data/webpack/scenes/ContentViews/ContentViewsActions.js +31 -2
  292. data/webpack/scenes/ContentViews/ContentViewsConstants.js +5 -1
  293. data/webpack/scenes/ContentViews/Copy/ContentViewCopySelectors.js +16 -0
  294. data/webpack/scenes/ContentViews/Copy/CopyContentViewForm.js +77 -0
  295. data/webpack/scenes/ContentViews/Copy/CopyContentViewModal.js +44 -0
  296. data/webpack/scenes/ContentViews/Copy/__tests__/contentViewCopyResult.fixtures.json +42 -0
  297. data/webpack/scenes/ContentViews/Copy/__tests__/copyContentView.test.js +39 -0
  298. data/webpack/scenes/ContentViews/Copy/index.js +4 -0
  299. data/webpack/scenes/ContentViews/Create/ContentViewCreateSelectors.js +16 -0
  300. data/webpack/scenes/ContentViews/Create/ContentViewFormComponents.js +58 -0
  301. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +175 -0
  302. data/webpack/scenes/ContentViews/Create/CreateContentViewModal.js +27 -0
  303. data/webpack/scenes/ContentViews/Create/__tests__/contentViewCreateResult.fixtures.json +42 -0
  304. data/webpack/scenes/ContentViews/Create/__tests__/createContentView.test.js +92 -0
  305. data/webpack/scenes/ContentViews/Create/index.js +4 -0
  306. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +16 -0
  307. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +20 -1
  308. data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +17 -7
  309. data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +19 -13
  310. data/webpack/scenes/ContentViews/Details/Filters/ContentType.js +40 -0
  311. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +124 -0
  312. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.fixtures.json +134 -0
  313. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +92 -0
  314. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +44 -25
  315. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewDetailRepos.test.js +17 -7
  316. data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetail.test.js +24 -0
  317. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +53 -3
  318. data/webpack/scenes/ContentViews/Table/tableDataGenerator.js +4 -3
  319. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +41 -0
  320. data/webpack/scenes/ContentViews/helpers.js +13 -0
  321. data/webpack/scenes/SmartProxy/Content.js +17 -0
  322. data/webpack/scenes/SmartProxy/SmartProxyContentActions.js +11 -0
  323. data/webpack/scenes/SmartProxy/SmartProxyContentConstants.js +3 -0
  324. data/webpack/scenes/SmartProxy/SmartProxyContentSelectors.js +16 -0
  325. data/webpack/scenes/SmartProxy/SmartProxyContentTable.js +152 -0
  326. data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentResult.fixtures.json +140 -0
  327. data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentTest.js +38 -0
  328. data/webpack/scenes/SmartProxy/index.js +4 -0
  329. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +13 -11
  330. data/webpack/scenes/Subscriptions/Manifest/ManifestActions.js +3 -3
  331. data/webpack/scenes/Subscriptions/Manifest/__tests__/ManifestActions.test.js +2 -2
  332. data/webpack/scenes/Subscriptions/Manifest/__tests__/SimpleContentAccess.test.js +2 -2
  333. data/webpack/test-utils/react-testing-lib-wrapper.js +8 -2
  334. data/webpack/utils/helpers.js +3 -0
  335. metadata +110 -31
  336. data/app/controllers/katello/api/v2/gpg_keys_controller.rb +0 -114
  337. data/app/overrides/disable_turbolinks_on_proxies_index.rb +0 -5
  338. data/app/services/katello/event_daemon.rb +0 -135
  339. data/app/services/katello/pulp/content_counts_calculator.rb +0 -60
  340. data/lib/katello/tasks/common.rake +0 -7
  341. data/lib/katello/tasks/reports.rake +0 -4
  342. data/lib/katello/tasks/upgrades/3.10/update_gpg_key_urls.rake +0 -32
  343. data/webpack/__mocks__/foremanReact/components/common/Fill/GlobalFill.js +0 -3
  344. data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.scss +0 -5
  345. data/webpack/scenes/ContentViews/Table/actionResolver.js +0 -28
@@ -107,7 +107,7 @@ module Katello
107
107
 
108
108
  def find_products
109
109
  params.require(:ids)
110
- @products = Product.where(:id => params[:ids])
110
+ @products = Product.readable.where(:id => params[:ids])
111
111
  end
112
112
  end
113
113
  end
@@ -4,7 +4,7 @@ module Katello
4
4
 
5
5
  before_action :find_activation_key, :only => [:index]
6
6
  before_action :find_organization, :only => [:create, :index, :auto_complete_search]
7
- before_action :find_product, :only => [:update, :destroy, :sync]
7
+ before_action :find_authorized_katello_resource, :only => [:update, :destroy, :sync]
8
8
  before_action :find_organization_from_product, :only => [:update]
9
9
  before_action :authorize_gpg_key, :only => [:update, :create]
10
10
  before_action :authorize_ssl_ca_cert, :only => [:update, :create]
@@ -131,14 +131,14 @@ module Katello
131
131
  protected
132
132
 
133
133
  def find_product(options = {})
134
- @product = Product.includes(options[:includes] || []).find_by(:id => params[:id])
135
- fail HttpErrors::NotFound, _("Couldn't find product '%s'") % params[:id] unless @product
134
+ @product = Product.includes(options[:includes] || []).readable.find_by(:id => params[:id])
135
+ throw_resource_not_found(name: 'product', id: params[:id]) if @product.nil?
136
136
  end
137
137
 
138
138
  def find_activation_key
139
139
  if params[:activation_key_id]
140
- @activation_key = ActivationKey.find_by(:id => params[:activation_key_id])
141
- fail HttpErrors::NotFound, _("Couldn't find activation key '%s'") % params[:activation_key_id] if @activation_key.nil?
140
+ @activation_key = ActivationKey.readable.find_by(:id => params[:activation_key_id])
141
+ throw_resource_not_found(name: 'Activation Key', id: params[:activation_key_id]) if @activation_key.nil?
142
142
  @organization = @activation_key.organization
143
143
  end
144
144
  end
@@ -151,7 +151,7 @@ module Katello
151
151
  gpg_key_id = product_params[:gpg_key_id]
152
152
  if gpg_key_id
153
153
  gpg_key = GpgKey.readable.where(:id => gpg_key_id, :organization_id => @organization).first
154
- fail HttpErrors::NotFound, _("Couldn't find gpg key '%s'") % gpg_key_id if gpg_key.nil?
154
+ throw_resource_not_found(name: 'gpg key', id: gpg_key_id) if gpg_key.nil?
155
155
  end
156
156
  end
157
157
 
@@ -159,7 +159,7 @@ module Katello
159
159
  ssl_ca_cert_id = product_params[:ssl_ca_cert_id]
160
160
  if ssl_ca_cert_id
161
161
  ssl_ca_cert = GpgKey.readable.where(:id => ssl_ca_cert_id, :organization_id => @organization).first
162
- fail HttpErrors::NotFound, _("Couldn't find ssl ca cert '%s'") % ssl_ca_cert_id if ssl_ca_cert.nil?
162
+ throw_resource_not_found(name: 'ssl ca cert', id: ssl_ca_cert_id) if ssl_ca_cert.nil?
163
163
  end
164
164
  end
165
165
 
@@ -167,7 +167,7 @@ module Katello
167
167
  ssl_client_cert_id = product_params[:ssl_client_cert_id]
168
168
  if ssl_client_cert_id
169
169
  ssl_client_cert = GpgKey.readable.where(:id => ssl_client_cert_id, :organization_id => @organization).first
170
- fail HttpErrors::NotFound, _("Couldn't find ssl client cert '%s'") % ssl_client_cert_id if ssl_client_cert.nil?
170
+ throw_resource_not_found(name: 'ssl client cert', id: ssl_client_cert_id) if ssl_client_cert.nil?
171
171
  end
172
172
  end
173
173
 
@@ -175,7 +175,7 @@ module Katello
175
175
  ssl_client_key_id = product_params[:ssl_client_key_id]
176
176
  if ssl_client_key_id
177
177
  ssl_client_key = GpgKey.readable.where(:id => ssl_client_key_id, :organization_id => @organization).first
178
- fail HttpErrors::NotFound, _("Couldn't find ssl client key '%s'") % ssl_client_key_id if ssl_client_key.nil?
178
+ throw_resource_not_found(name: 'ssl client key', id: ssl_client_key_id) if ssl_client_key.nil?
179
179
  end
180
180
  end
181
181
 
@@ -25,7 +25,6 @@ module Katello
25
25
  before_action(:only => [:create, :update]) { find_content_credential CONTENT_CREDENTIAL_SSL_CA_CERT_TYPE }
26
26
  before_action(:only => [:create, :update]) { find_content_credential CONTENT_CREDENTIAL_SSL_CLIENT_CERT_TYPE }
27
27
  before_action(:only => [:create, :update]) { find_content_credential CONTENT_CREDENTIAL_SSL_CLIENT_KEY_TYPE }
28
- before_action :check_ignore_global_proxy, :only => [ :update, :create ]
29
28
  skip_before_action :authorize, :only => [:gpg_key_content]
30
29
  skip_before_action :check_media_type, :only => [:upload_content]
31
30
 
@@ -45,7 +44,7 @@ module Katello
45
44
  param :checksum_type, String, :desc => N_("Checksum of the repository, currently 'sha1' & 'sha256' are supported")
46
45
  param :docker_upstream_name, String, :desc => N_("Name of the upstream docker repository")
47
46
  param :docker_tags_whitelist, Array, :desc => N_("Comma-separated list of tags to sync for Container Image repository")
48
- param :download_policy, ["immediate", "on_demand", "background"], :desc => N_("download policy for yum repos (either 'immediate', 'on_demand', or 'background (deprecated)')")
47
+ param :download_policy, ["immediate", "on_demand"], :desc => N_("download policy for yum repos (either 'immediate' or 'on_demand')")
49
48
  param :download_concurrency, :number, :desc => N_("Used to determine download concurrency of the repository in pulp3. Use value less than 20. Defaults to 10")
50
49
  param :mirror_on_sync, :bool, :desc => N_("true if this repository when synced has to be mirrored from the source and stale rpms removed")
51
50
  param :verify_ssl_on_sync, :bool, :desc => N_("if true, Katello will verify the upstream url's SSL certifcates are signed by a trusted CA")
@@ -56,11 +55,11 @@ module Katello
56
55
  param :deb_releases, String, :desc => N_("comma-separated list of releases to be synced from deb-archive")
57
56
  param :deb_components, String, :desc => N_("comma-separated list of repo components to be synced from deb-archive")
58
57
  param :deb_architectures, String, :desc => N_("comma-separated list of architectures to be synced from deb-archive")
59
- param :ignore_global_proxy, :bool, :desc => N_("if true, will ignore the globally configured proxy when syncing"), :deprecated => true
60
58
  param :ignorable_content, Array, :desc => N_("List of content units to ignore while syncing a yum repository. Must be subset of %s") % RootRepository::IGNORABLE_CONTENT_UNIT_TYPES.join(",")
61
59
  param :ansible_collection_requirements, String, :desc => N_("Contents of requirement yaml file to sync from URL")
62
60
  param :http_proxy_policy, ::Katello::RootRepository::HTTP_PROXY_POLICIES, :desc => N_("policies for HTTP proxy for content sync")
63
61
  param :http_proxy_id, :number, :desc => N_("ID of a HTTP Proxy")
62
+ param :arch, String, :desc => N_("Architecture of content in the repository")
64
63
  end
65
64
 
66
65
  def_param_group :repo_create do
@@ -95,6 +94,7 @@ module Katello
95
94
  param :available_for, String, :desc => N_("interpret specified object to return only Repositories that can be associated with specified object. Only 'content_view' & 'content_view_version' are supported."),
96
95
  :required => false
97
96
  param :with_content, RepositoryTypeManager.enabled_content_types, :desc => N_("only repositories having at least one of the specified content type ex: rpm , erratum")
97
+ param :download_policy, ::Runcible::Models::YumImporter::DOWNLOAD_POLICIES, :desc => N_("limit to only repositories with this download policy")
98
98
  param_group :search, Api::V2::ApiController
99
99
  add_scoped_search_description_for(Repository)
100
100
  def index
@@ -138,6 +138,7 @@ module Katello
138
138
  def index_relation_product(query)
139
139
  query = query.joins(:root => :product).where("#{Product.table_name}.organization_id" => @organization) if @organization
140
140
  query = query.joins(:root).where("#{RootRepository.table_name}.product_id" => @product.id) if @product
141
+ query = query.joins(:root).where("#{RootRepository.table_name}.download_policy" => params[:download_policy]) if params[:download_policy]
141
142
  query
142
143
  end
143
144
 
@@ -224,10 +225,6 @@ module Katello
224
225
  fail HttpErrors::UnprocessableEntity, msg
225
226
  end
226
227
 
227
- if repo_params['content_type'] == "puppet" || repo_params['content_type'] == "ostree"
228
- ::Foreman::Deprecation.api_deprecation_warning("Puppet and OSTree will no longer be supported in Katello 4.0")
229
- end
230
-
231
228
  gpg_key = get_content_credential(repo_params, CONTENT_CREDENTIAL_GPG_KEY_TYPE)
232
229
  ssl_ca_cert = get_content_credential(repo_params, CONTENT_CREDENTIAL_SSL_CA_CERT_TYPE)
233
230
  ssl_client_cert = get_content_credential(repo_params, CONTENT_CREDENTIAL_SSL_CLIENT_CERT_TYPE)
@@ -493,17 +490,6 @@ module Katello
493
490
  params.require(:repository).permit(*keys).to_h.with_indifferent_access
494
491
  end
495
492
 
496
- def check_ignore_global_proxy
497
- if params.key?(:ignore_global_proxy)
498
- ::Foreman::Deprecation.api_deprecation_warning("The parameter ignore_global_proxy will be removed in a future Katello release. Please update to use the http_proxy_policy parameter.")
499
- if ::Foreman::Cast.to_bool(params[:ignore_global_proxy])
500
- params[:repository][:http_proxy_policy] = RootRepository::NO_DEFAULT_HTTP_PROXY
501
- else
502
- params[:repository][:http_proxy_policy] = RootRepository::GLOBAL_DEFAULT_HTTP_PROXY
503
- end
504
- end
505
- end
506
-
507
493
  def get_content_credential(repo_params, content_type)
508
494
  credential_value = @product.send(content_type)
509
495
 
@@ -515,7 +501,7 @@ module Katello
515
501
  end
516
502
 
517
503
  # rubocop:disable Metrics/CyclomaticComplexity
518
- def construct_repo_from_params(repo_params)
504
+ def construct_repo_from_params(repo_params) # rubocop:disable Metrics/AbcSize
519
505
  root = @product.add_repo(repo_params.slice(:label, :name, :description, :url, :content_type, :arch, :unprotected,
520
506
  :gpg_key, :ssl_ca_cert, :ssl_client_cert, :ssl_client_key,
521
507
  :checksum_type, :download_policy, :http_proxy_policy).to_h.with_indifferent_access)
@@ -4,8 +4,11 @@ module Katello
4
4
 
5
5
  include Katello::Concerns::FilteredAutoCompleteSearch
6
6
 
7
- before_action :find_product_or_organization
7
+ before_action :set_readable_product_scope, only: [:index, :show, :available_repositories, :auto_complete_search]
8
+ before_action :set_editable_product_scope, only: [:enable, :disable]
9
+ before_action :find_product
8
10
  before_action :custom_product?
11
+ before_action :find_organization
9
12
  before_action :find_product_content, :except => [:index, :auto_complete_search]
10
13
 
11
14
  resource_description do
@@ -102,7 +105,8 @@ module Katello
102
105
 
103
106
  def index_relation
104
107
  if @product.nil?
105
- relation = @organization.product_contents.displayable
108
+ authorized_product_contents = Katello::ProductContent.joins(:product).merge(@product_scope)
109
+ relation = @organization.product_contents.merge(authorized_product_contents).displayable
106
110
  else
107
111
  relation = @product.displayable_product_contents
108
112
  end
@@ -125,25 +129,31 @@ module Katello
125
129
  if @product.present?
126
130
  @product_content = @product.product_content_by_id(params[:id])
127
131
  else
128
- content = Katello::Content.find_by(:cp_content_id => params[:id], :organization_id => @organization[:id])
129
- @product_content = Katello::ProductContent.find_by(:content_id => content.id)
132
+ content = Katello::Content.where(cp_content_id: params[:id], organization: @organization)
133
+ authorized_product_contents = Katello::ProductContent.joins(:product).merge(@product_scope)
134
+ @product_content = authorized_product_contents.joins(:content).merge(content).first
135
+ @product = @product_content&.product
130
136
  end
131
- fail HttpErrors::NotFound, _("Couldn't find repository set with id '%s'.") % params[:id] if @product_content.nil?
132
- @product = @product_content.product if @product.nil?
137
+ throw_resource_not_found(name: 'repository set', id: params[:id]) if @product_content.nil?
133
138
  end
134
139
 
135
- def find_product_or_organization
140
+ def find_product
136
141
  if params[:product_id]
137
- find_product
138
- else
139
- @organization = find_organization
142
+ @product = @product_scope.find_by(id: params[:product_id])
143
+ throw_resource_not_found(name: 'product', id: params[:product_id]) if @product.nil?
140
144
  end
141
145
  end
142
146
 
143
- def find_product
144
- @product = Product.find_by(:id => params[:product_id])
145
- fail HttpErrors::NotFound, _("Couldn't find product with id '%s'") % params[:product_id] if @product.nil?
146
- @organization = @product.organization
147
+ def set_readable_product_scope
148
+ @product_scope = Katello::Product.readable
149
+ end
150
+
151
+ def set_editable_product_scope
152
+ @product_scope = Katello::Product.editable
153
+ end
154
+
155
+ def find_organization
156
+ @organization = @product&.organization || super
147
157
  end
148
158
 
149
159
  def custom_product?
@@ -0,0 +1,34 @@
1
+ module Katello
2
+ class Api::V2::SimpleContentAccessController < Api::V2::ApiController
3
+ before_action :find_organization
4
+ before_action :check_upstream_connection
5
+
6
+ resource_description do
7
+ description "Red Hat subscriptions management platform."
8
+ api_version 'v2'
9
+ end
10
+
11
+ api :GET, "/organizations/:organization_id/simple_content_access/eligible",
12
+ N_("Check if the specified organization is eligible for Simple Content Access")
13
+ def eligible
14
+ eligible = @organization.upstream_consumer.simple_content_access_eligible?
15
+ render json: { simple_content_access_eligible: eligible }
16
+ end
17
+
18
+ api :PUT, "/organizations/:organization_id/simple_content_access/enable",
19
+ N_("Enable simple content access for a manifest")
20
+ param :organization_id, :number, :desc => N_("Organization ID"), :required => true
21
+ def enable
22
+ task = async_task(::Actions::Katello::Organization::SimpleContentAccess::Enable, params[:organization_id])
23
+ respond_for_async :resource => task
24
+ end
25
+
26
+ api :PUT, "/organizations/:organization_id/simple_content_access/disable",
27
+ N_("Disable simple content access for a manifest")
28
+ param :organization_id, :number, :desc => N_("Organization ID"), :required => true
29
+ def disable
30
+ task = async_task(::Actions::Katello::Organization::SimpleContentAccess::Disable, params[:organization_id])
31
+ respond_for_async :resource => task
32
+ end
33
+ end
34
+ end
@@ -41,7 +41,7 @@ module Katello
41
41
  :start_date, :end_date, :available, :quantity, :account_number, :contract_number,
42
42
  :support_level, :ram, :stacking_id, :multi_entitlement, :type, :product_id,
43
43
  :unmapped_guest, :virt_only, :virt_who, :upstream?],
44
- ['Pool Id', 'Subscription Id', 'Name', 'Candlepin Id', 'Organization Id',
44
+ ['Pool Id Number', 'Subscription Id', 'Name', 'Pool Id', 'Organization Id',
45
45
  'Sockets', 'Cores', 'Start Date', 'End Date', 'Available', 'Quantity', 'Account Number',
46
46
  'Contract Number', 'Support Level', 'RAM', 'Stacking Id', 'Multi Entitlement', 'Type',
47
47
  'Product Id', 'Unmapped Guest', 'Virt Only', 'Requires Virt Who', 'Upstream'])
@@ -2,7 +2,7 @@ module Katello
2
2
  class Api::V2::UpstreamSubscriptionsController < Api::V2::ApiController
3
3
  before_action :find_organization
4
4
  before_action :check_upstream_connection
5
-
5
+ before_action :deprecated, only: [:simple_content_access_eligible, :enable_simple_content_access, :disable_simple_content_access]
6
6
  resource_description do
7
7
  description "Red Hat subscriptions management platform."
8
8
  api_version 'v2'
@@ -78,14 +78,14 @@ module Katello
78
78
  end
79
79
 
80
80
  api :GET, "/organizations/:organization_id/upstream_subscriptions/simple_content_access/eligible",
81
- N_("Check if the specified organization is eligible for Simple Content Access")
81
+ N_("Check if the specified organization is eligible for Simple Content Access"), :deprecated => true
82
82
  def simple_content_access_eligible
83
83
  eligible = @organization.upstream_consumer.simple_content_access_eligible?
84
84
  render json: { simple_content_access_eligible: eligible }
85
85
  end
86
86
 
87
87
  api :PUT, "/organizations/:organization_id/upstream_subscriptions/simple_content_access/enable",
88
- N_("Enable simple content access for a manifest")
88
+ N_("Enable simple content access for a manifest"), :deprecated => true
89
89
  param :organization_id, :number, :desc => N_("Organization ID"), :required => true
90
90
  def enable_simple_content_access
91
91
  task = async_task(::Actions::Katello::Organization::SimpleContentAccess::Enable, params[:organization_id])
@@ -93,7 +93,7 @@ module Katello
93
93
  end
94
94
 
95
95
  api :PUT, "/organizations/:organization_id/upstream_subscriptions/simple_content_access/disable",
96
- N_("Disable simple content access for a manifest")
96
+ N_("Disable simple content access for a manifest"), :deprecated => true
97
97
  param :organization_id, :number, :desc => N_("Organization ID"), :required => true
98
98
  def disable_simple_content_access
99
99
  task = async_task(::Actions::Katello::Organization::SimpleContentAccess::Disable, params[:organization_id])
@@ -124,5 +124,9 @@ module Katello
124
124
  { "pool" => pool[:id], "quantity" => pool[:quantity] } if pool
125
125
  end
126
126
  end
127
+
128
+ def deprecated
129
+ ::Foreman::Deprecation.api_deprecation_warning("it will be removed in Katello 4.0, Please see /api/v2/simple_content_access")
130
+ end
127
131
  end
128
132
  end
@@ -42,6 +42,16 @@ module Katello
42
42
  fail HttpErrors::NotFound, _("Could not find %{name} resource with id %{id}") % {id: id, name: name}
43
43
  end
44
44
 
45
+ def throw_resources_not_found(name:, expected_ids: [])
46
+ resources = yield
47
+ found_ids = resources.map(&:id)
48
+ missing_ids = expected_ids.map(&:to_i) - found_ids
49
+
50
+ if missing_ids.any?
51
+ fail HttpErrors::NotFound, _("Could not find %{name} resources with ids %{ids}") % {ids: missing_ids.join(', '), name: name}
52
+ end
53
+ end
54
+
45
55
  def check_association_ids
46
56
  if filtered_associations
47
57
  wrapped_params = params[self._wrapper_options.name]
@@ -3,37 +3,41 @@ module Katello
3
3
  module Api::V2::BulkHostsExtensions
4
4
  extend ActiveSupport::Concern
5
5
 
6
+ def bulk_hosts_relation(permission, org)
7
+ relation = ::Host::Managed.authorized(permission)
8
+ relation = relation.where(organization: org) if org
9
+ relation
10
+ end
11
+
6
12
  def find_bulk_hosts(permission, bulk_params, restrict_to = nil)
7
13
  #works on a structure of param_group bulk_params and transforms it into a list of systems
8
- find_organization
9
14
  bulk_params[:included] ||= {}
10
15
  bulk_params[:excluded] ||= {}
11
- @hosts = []
12
16
 
13
- unless bulk_params[:included][:ids].blank?
14
- @hosts = ::Host::Managed.authorized(permission).where(:id => bulk_params[:included][:ids])
15
- @hosts = @hosts.where(:organization_id => @organization.id) if @organization
17
+ if bulk_params[:included][:ids].blank? && bulk_params[:included][:search].nil?
18
+ fail HttpErrors::BadRequest, _("No hosts have been specified.")
19
+ end
20
+
21
+ find_organization
22
+ @hosts = bulk_hosts_relation(permission, @organization)
23
+
24
+ if bulk_params[:included][:ids].present?
25
+ @hosts = @hosts.where(id: bulk_params[:included][:ids])
16
26
  end
17
27
 
18
28
  if bulk_params[:included][:search]
19
- search_hosts = ::Host::Managed.authorized(permission)
20
- search_hosts = search_hosts.where(:organization_id => @organization.id) if @organization
21
- search_hosts = search_hosts.search_for(bulk_params[:included][:search])
22
- if @hosts.any?
23
- @hosts = ::Host.where(id: @hosts).or(::Host.where(id: search_hosts))
24
- else
25
- @hosts = search_hosts
26
- end
29
+ search_hosts = bulk_hosts_relation(permission, @organization).search_for(bulk_params[:included][:search])
30
+ @hosts = @hosts.merge(search_hosts)
27
31
  end
28
32
 
29
33
  @hosts = restrict_to.call(@hosts) if restrict_to
30
- @hosts = @hosts.where.not(id: bulk_params[:excluded][:ids]) unless bulk_params[:excluded][:ids].blank?
31
34
 
32
- if bulk_params[:included][:ids].blank? && bulk_params[:included][:search].nil?
33
- fail HttpErrors::BadRequest, _("No hosts have been specified.")
34
- elsif @hosts.empty?
35
- fail HttpErrors::Forbidden, _("Action unauthorized to be performed on selected hosts.")
35
+ if bulk_params[:excluded][:ids].present?
36
+ @hosts = @hosts.where.not(id: bulk_params[:excluded][:ids])
36
37
  end
38
+
39
+ fail HttpErrors::Forbidden, _("Action unauthorized to be performed on selected hosts.") if @hosts.empty?
40
+
37
41
  @hosts
38
42
  end
39
43
 
@@ -107,7 +107,7 @@ module Katello
107
107
  true
108
108
  end
109
109
 
110
- def authorize_remove_environments(view, options)
110
+ def authorize_remove_environments(view, options) # rubocop:disable Metrics/CyclomaticComplexity
111
111
  env_ids = options[:environment_ids]
112
112
 
113
113
  return true if env_ids.blank?
@@ -0,0 +1,16 @@
1
+ module Katello
2
+ module Concerns
3
+ module RegistrationControllerExtensions
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ before_action :format_activation_key, only: [:create]
8
+ end
9
+
10
+ def format_activation_key
11
+ return if params[:activation_key].blank?
12
+ params[:activation_key] = params[:activation_key].split(',').map(&:strip).reject(&:blank?).join(',')
13
+ end
14
+ end
15
+ end
16
+ end
@@ -35,8 +35,6 @@ module Katello
35
35
  module RepoMethods
36
36
  # returns all repos in hash representation with minors and arch children included
37
37
  def collect_repos(products, env, include_feedless = true)
38
- Glue::Pulp::Repos.prepopulate! products, env, []
39
-
40
38
  products.map do |prod|
41
39
  minor_repos, repos_without_minor = collect_minor(prod.repos(env, nil, include_feedless))
42
40
  { :name => prod.name, :object => prod, :id => prod.id, :type => "product", :repos => repos_without_minor,
@@ -13,7 +13,7 @@ module Actions
13
13
  ::Katello::Resources::Candlepin::Environment.create(input['organization_label'],
14
14
  input['cp_id'],
15
15
  input['name'],
16
- input['description'])
16
+ input['description'].try(:truncate, 255))
17
17
  end
18
18
  end
19
19
  end
@@ -9,7 +9,7 @@ module Actions
9
9
  :new_content_id => new_content_id)
10
10
  end
11
11
 
12
- def finalize
12
+ def finalize # rubocop:disable Metrics/AbcSize
13
13
  content_view = ::Katello::ContentView.find(input[:content_view_id])
14
14
  environment = ::Katello::KTEnvironment.find(input[:environment_id])
15
15
  content_ids = content_view.repos(environment).map(&:content_id).uniq.compact