katello 3.16.1.1 → 3.17.0.rc2.2

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 (530) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/katello/katello.scss +3 -7
  3. data/app/controllers/katello/api/registry/registry_proxies_controller.rb +5 -3
  4. data/app/controllers/katello/api/rhsm/candlepin_dynflow_proxy_controller.rb +1 -1
  5. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +1 -1
  6. data/app/controllers/katello/api/v2/activation_keys_controller.rb +8 -0
  7. data/app/controllers/katello/api/v2/api_controller.rb +1 -1
  8. data/app/controllers/katello/api/v2/content_credentials_controller.rb +1 -1
  9. data/app/controllers/katello/api/v2/content_uploads_controller.rb +5 -5
  10. data/app/controllers/katello/api/v2/content_view_repositories_controller.rb +47 -0
  11. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +50 -19
  12. data/app/controllers/katello/api/v2/gpg_keys_controller.rb +1 -1
  13. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +10 -4
  14. data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +10 -0
  15. data/app/controllers/katello/api/v2/repositories_controller.rb +15 -11
  16. data/app/controllers/katello/api/v2/subscriptions_controller.rb +1 -1
  17. data/app/controllers/katello/api/v2/upstream_subscriptions_controller.rb +16 -0
  18. data/app/controllers/katello/concerns/api/v2/{associations_permission_check.rb → authorization.rb} +20 -2
  19. data/app/controllers/katello/concerns/api/v2/bulk_hosts_extensions.rb +4 -4
  20. data/app/controllers/katello/concerns/api/v2/hostgroups_controller_extensions.rb +1 -1
  21. data/app/helpers/katello/concerns/dashboard_helper_extensions.rb +10 -0
  22. data/app/helpers/katello/content_view_helper.rb +1 -1
  23. data/app/helpers/katello/hosts_and_hostgroups_helper.rb +6 -7
  24. data/app/lib/actions/katello/capsule_content/sync.rb +1 -1
  25. data/app/lib/actions/katello/content_view/capsule_sync.rb +1 -1
  26. data/app/lib/actions/katello/content_view/destroy.rb +2 -2
  27. data/app/lib/actions/katello/content_view/incremental_updates.rb +1 -1
  28. data/app/lib/actions/katello/content_view/promote_to_environment.rb +1 -0
  29. data/app/lib/actions/katello/content_view/publish.rb +12 -7
  30. data/app/lib/actions/katello/content_view_puppet_environment/clone.rb +1 -1
  31. data/app/lib/actions/katello/content_view_puppet_environment/create.rb +2 -2
  32. data/app/lib/actions/katello/content_view_version/incremental_update.rb +6 -5
  33. data/app/lib/actions/katello/organization/manifest_delete.rb +1 -0
  34. data/app/lib/actions/katello/organization/manifest_import.rb +1 -0
  35. data/app/lib/actions/katello/organization/manifest_refresh.rb +1 -0
  36. data/app/lib/actions/katello/organization/simple_content_access/disable.rb +17 -0
  37. data/app/lib/actions/katello/organization/simple_content_access/enable.rb +17 -0
  38. data/app/lib/actions/katello/organization/simple_content_access/toggle.rb +36 -0
  39. data/app/lib/actions/katello/orphan_cleanup/remove_orphans.rb +13 -0
  40. data/app/lib/actions/katello/repository/clone_contents.rb +3 -3
  41. data/app/lib/actions/katello/repository/clone_to_environment.rb +2 -2
  42. data/app/lib/actions/katello/repository/clone_to_version.rb +1 -1
  43. data/app/lib/actions/katello/repository/create.rb +1 -1
  44. data/app/lib/actions/katello/repository/destroy.rb +5 -3
  45. data/app/lib/actions/katello/repository/export.rb +3 -3
  46. data/app/lib/actions/katello/repository/finish_upload.rb +2 -2
  47. data/app/lib/actions/katello/repository/import_upload.rb +3 -3
  48. data/app/lib/actions/katello/repository/metadata_generate.rb +1 -1
  49. data/app/lib/actions/katello/repository/multi_clone_contents.rb +1 -1
  50. data/app/lib/actions/katello/repository/purge_empty_content.rb +1 -1
  51. data/app/lib/actions/katello/repository/remove_content.rb +1 -1
  52. data/app/lib/actions/katello/repository/sync.rb +2 -2
  53. data/app/lib/actions/katello/repository/update.rb +2 -2
  54. data/app/lib/actions/katello/repository/update_http_proxy_details.rb +1 -1
  55. data/app/lib/actions/katello/repository/update_metadata_sync.rb +1 -1
  56. data/app/lib/actions/katello/repository/upload_files.rb +2 -2
  57. data/app/lib/actions/katello/repository/verify_checksum.rb +2 -2
  58. data/app/lib/actions/pulp/content_view_puppet_environment/copy_contents.rb +1 -1
  59. data/app/lib/actions/pulp/orchestration/orphan_cleanup/remove_orphans.rb +1 -1
  60. data/app/lib/actions/pulp/orchestration/repository/smart_proxy_sync.rb +1 -0
  61. data/app/lib/actions/pulp/repository/copy_all_units.rb +1 -1
  62. data/app/lib/actions/pulp/repository/copy_units.rb +1 -1
  63. data/app/lib/actions/pulp/repository/create.rb +1 -1
  64. data/app/lib/actions/pulp/repository/destroy.rb +1 -1
  65. data/app/lib/actions/pulp/repository/remove_units.rb +2 -2
  66. data/app/lib/actions/pulp/repository/sync.rb +1 -1
  67. data/app/lib/actions/pulp3/content_guard/refresh_all_distributions.rb +19 -0
  68. data/app/lib/actions/pulp3/content_migration.rb +3 -3
  69. data/app/lib/actions/pulp3/content_view_version/create_exporter.rb +20 -0
  70. data/app/lib/actions/pulp3/content_view_version/destroy_exporter.rb +16 -0
  71. data/app/lib/actions/pulp3/content_view_version/export.rb +19 -0
  72. data/app/lib/actions/pulp3/import_migration.rb +3 -3
  73. data/app/lib/actions/pulp3/orchestration/content_view_version/export.rb +69 -0
  74. data/app/lib/actions/pulp3/orchestration/repository/create.rb +1 -1
  75. data/app/lib/actions/pulp3/orchestration/repository/upload_content.rb +1 -1
  76. data/app/lib/actions/pulp3/repository/multi_copy_content.rb +1 -1
  77. data/app/lib/actions/pulp3/repository/multi_copy_units.rb +2 -2
  78. data/app/lib/actions/pulp3/repository/refresh_distribution.rb +11 -5
  79. data/app/lib/actions/pulp3/repository/save_artifact.rb +1 -1
  80. data/app/lib/actions/pulp3/repository/save_distribution_references.rb +2 -2
  81. data/app/lib/actions/pulp3/repository/save_version.rb +1 -1
  82. data/app/lib/actions/pulp3/repository/save_versions.rb +1 -1
  83. data/app/lib/actions/pulp3/repository/upload_file.rb +1 -1
  84. data/app/lib/katello/concerns/base_template_scope_extensions.rb +5 -3
  85. data/app/lib/katello/concerns/permission_extensions.rb +14 -0
  86. data/app/lib/katello/foreman.rb +1 -1
  87. data/app/lib/katello/resources/cdn.rb +2 -3
  88. data/app/lib/katello/resources/registry.rb +3 -3
  89. data/app/lib/katello/util/cdn_var_substitutor.rb +7 -9
  90. data/app/lib/katello/validators/hostgroup_kickstart_repository_validator.rb +11 -11
  91. data/app/models/katello/activation_key.rb +1 -1
  92. data/app/models/katello/authorization/content_view_version_export_history.rb +11 -0
  93. data/app/models/katello/authorization/product.rb +4 -0
  94. data/app/models/katello/authorization/repository.rb +8 -0
  95. data/app/models/katello/concerns/content_facet_host_extensions.rb +9 -1
  96. data/app/models/katello/concerns/host_managed_extensions.rb +39 -0
  97. data/app/models/katello/concerns/hostgroup_extensions.rb +46 -24
  98. data/app/models/katello/concerns/organization_extensions.rb +6 -1
  99. data/app/models/katello/concerns/pulp_database_unit.rb +2 -2
  100. data/app/models/katello/concerns/redhat_extensions.rb +4 -2
  101. data/app/models/katello/concerns/smart_proxy_extensions.rb +21 -18
  102. data/app/models/katello/concerns/subscription_facet_host_extensions.rb +1 -1
  103. data/app/models/katello/concerns/widget_extensions.rb +23 -0
  104. data/app/models/katello/content_view.rb +10 -2
  105. data/app/models/katello/content_view_puppet_environment.rb +1 -1
  106. data/app/models/katello/content_view_version.rb +10 -1
  107. data/app/models/katello/content_view_version_export_history.rb +22 -0
  108. data/app/models/katello/docker_meta_tag.rb +1 -1
  109. data/app/models/katello/errata_status.rb +21 -12
  110. data/app/models/katello/erratum.rb +14 -1
  111. data/app/models/katello/erratum_cve.rb +8 -0
  112. data/app/models/katello/glue/candlepin/owner.rb +4 -2
  113. data/app/models/katello/glue/pulp/repo.rb +3 -1
  114. data/app/models/katello/host/content_facet.rb +25 -0
  115. data/app/models/katello/host_collection.rb +6 -0
  116. data/app/models/katello/hostgroup/content_facet.rb +18 -0
  117. data/app/models/katello/installed_package.rb +8 -0
  118. data/app/models/katello/kt_environment.rb +10 -2
  119. data/app/models/katello/model.rb +16 -0
  120. data/app/models/katello/package_group.rb +1 -1
  121. data/app/models/katello/ping.rb +8 -3
  122. data/app/models/katello/pool.rb +17 -0
  123. data/app/models/katello/product.rb +6 -0
  124. data/app/models/katello/pulp3/content_guard.rb +1 -1
  125. data/app/models/katello/purpose_addons_status.rb +1 -0
  126. data/app/models/katello/purpose_role_status.rb +1 -0
  127. data/app/models/katello/purpose_sla_status.rb +1 -0
  128. data/app/models/katello/purpose_status.rb +2 -2
  129. data/app/models/katello/purpose_usage_status.rb +1 -0
  130. data/app/models/katello/repository.rb +21 -16
  131. data/app/models/katello/rhsm_fact_parser.rb +1 -1
  132. data/app/models/katello/root_repository.rb +11 -12
  133. data/app/models/katello/subscription_status.rb +1 -1
  134. data/app/models/katello/sync_plan.rb +8 -0
  135. data/app/models/katello/trace_status.rb +1 -1
  136. data/app/models/setting/content.rb +7 -1
  137. data/app/services/katello/candlepin/event_handler.rb +1 -0
  138. data/app/services/katello/event_daemon.rb +7 -8
  139. data/app/services/katello/host_status_manager.rb +20 -0
  140. data/app/services/katello/pulp/content.rb +1 -1
  141. data/app/services/katello/pulp/repository.rb +7 -7
  142. data/app/services/katello/pulp/repository/deb.rb +2 -2
  143. data/app/services/katello/pulp/repository/docker.rb +5 -5
  144. data/app/services/katello/pulp/repository/file.rb +2 -2
  145. data/app/services/katello/pulp/repository/ostree.rb +2 -2
  146. data/app/services/katello/pulp/repository/puppet.rb +2 -2
  147. data/app/services/katello/pulp/repository/yum.rb +5 -6
  148. data/app/services/katello/pulp/smart_proxy_repository.rb +1 -1
  149. data/app/services/katello/pulp3/ansible_collection.rb +2 -2
  150. data/app/services/katello/pulp3/api/core.rb +16 -0
  151. data/app/services/katello/pulp3/content.rb +3 -3
  152. data/app/services/katello/pulp3/content_view_version/export.rb +71 -0
  153. data/app/services/katello/pulp3/distribution.rb +2 -2
  154. data/app/services/katello/pulp3/docker_blob.rb +2 -2
  155. data/app/services/katello/pulp3/docker_manifest.rb +2 -2
  156. data/app/services/katello/pulp3/docker_manifest_list.rb +2 -2
  157. data/app/services/katello/pulp3/docker_tag.rb +2 -2
  158. data/app/services/katello/pulp3/erratum.rb +2 -2
  159. data/app/services/katello/pulp3/file_unit.rb +2 -2
  160. data/app/services/katello/pulp3/migration.rb +140 -35
  161. data/app/services/katello/pulp3/migration_plan.rb +50 -14
  162. data/app/services/katello/pulp3/migration_switchover.rb +41 -9
  163. data/app/services/katello/pulp3/module_stream.rb +2 -2
  164. data/app/services/katello/pulp3/package_group.rb +2 -2
  165. data/app/services/katello/pulp3/repository.rb +2 -1
  166. data/app/services/katello/pulp3/repository/docker.rb +18 -10
  167. data/app/services/katello/pulp3/repository/yum.rb +16 -71
  168. data/app/services/katello/pulp3/repository_mirror.rb +2 -1
  169. data/app/services/katello/pulp3/rpm.rb +2 -2
  170. data/app/services/katello/pulp3/smart_proxy_mirror_repository.rb +1 -1
  171. data/app/services/katello/pulp3/smart_proxy_repository.rb +1 -1
  172. data/app/services/katello/pulp3/srpm.rb +2 -2
  173. data/app/services/katello/pulp3/task_group.rb +1 -1
  174. data/app/services/katello/pulp3/yum_metadata_file.rb +2 -2
  175. data/app/services/katello/registration_manager.rb +9 -3
  176. data/app/services/katello/repository_type.rb +1 -1
  177. data/app/services/katello/smart_proxy_helper.rb +1 -1
  178. data/app/views/foreman/job_templates/install_errata_-_katello_ansible_default.erb +10 -2
  179. data/app/views/foreman/smart_proxies/_content_sync.html.erb +1 -1
  180. data/app/views/katello/api/v2/content_view_repositories/show_all.json.rabl +8 -0
  181. data/app/views/katello/api/v2/content_view_version_export_histories/index.json.rabl +7 -0
  182. data/app/views/katello/api/v2/content_view_version_export_histories/show.json.rabl +13 -0
  183. data/app/views/katello/api/v2/package_groups/show.json.rabl +1 -1
  184. data/app/views/katello/api/v2/packages/show.json.rabl +1 -1
  185. data/app/views/katello/api/v2/repositories/base.json.rabl +1 -0
  186. data/app/views/katello/api/v2/srpms/show.json.rabl +1 -1
  187. data/app/views/katello/api/v2/sync_plans/show.json.rabl +2 -1
  188. data/config/routes/api/v2.rb +8 -1
  189. data/db/migrate/20141222151001_add_host_content_view_environment.rb +1 -1
  190. data/db/migrate/20180904122343_create_hostgroup_content_facet.katello.rb +16 -0
  191. data/db/migrate/20200514092553_move_katello_fields_from_hostgroups.katello.rb +53 -0
  192. data/db/migrate/20200610112009_remove_audits_of_root_repo_with_content_id.rb +9 -0
  193. data/db/migrate/20200701150946_add_auto_enabled_to_root_repository.rb +5 -0
  194. data/db/migrate/20200818040551_add_content_view_version_export_history.rb +13 -0
  195. data/db/migrate/20200818192230_update_system_purpose_status.rb +12 -0
  196. data/db/migrate/20200820145217_add_download_concurrency_to_katello_root_repositories.rb +5 -0
  197. data/db/migrate/20200910140340_remove_distribution_uuid.rb +5 -0
  198. data/db/migrate/20200914200906_remove_auto_enabled.rb +5 -0
  199. data/db/seeds.d/75-job_templates.rb +2 -2
  200. data/engines/bastion/app/assets/javascripts/bastion/bastion.js +1 -0
  201. data/engines/bastion/app/assets/javascripts/bastion/components/nutupane.factory.js +3 -1
  202. data/engines/bastion/app/assets/javascripts/bastion/routing.module.js +1 -1
  203. data/engines/bastion/vendor/assets/javascripts/bastion/angular-ui-router/stateEvents.js +300 -0
  204. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/activation-keys.controller.js +1 -1
  205. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-add-subscriptions.controller.js +1 -1
  206. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-associations.controller.js +6 -3
  207. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-details.controller.js +4 -2
  208. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-subscriptions.controller.js +1 -1
  209. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-add-subscriptions.html +1 -1
  210. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-associations-content-hosts.html +2 -2
  211. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-details.html +1 -1
  212. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/content-credential-products.controller.js +1 -1
  213. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/content-credential-repositories.controller.js +1 -1
  214. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-errata-modal.controller.js +5 -2
  215. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-host-collections-modal.controller.js +1 -1
  216. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-module-streams-modal.controller.js +1 -1
  217. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-packages-modal.controller.js +4 -1
  218. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-repository-sets-modal.controller.js +1 -1
  219. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-subscriptions-modal.controller.js +2 -1
  220. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-traces-modal.controller.js +1 -1
  221. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-environment-modal.html +7 -1
  222. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-errata-modal.html +1 -0
  223. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-packages-modal.html +1 -0
  224. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts-helper.service.js +1 -1
  225. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts.controller.js +5 -3
  226. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts.routes.js +1 -1
  227. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-debs-installed.controller.js +1 -1
  228. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-errata.controller.js +1 -1
  229. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-module-streams.controller.js +1 -1
  230. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-packages-applicable.controller.js +1 -1
  231. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-packages-installed.controller.js +1 -1
  232. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-traces.controller.js +1 -1
  233. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-add-host-collections.controller.js +1 -1
  234. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-add-subscriptions.controller.js +1 -1
  235. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-details-info.controller.js +11 -3
  236. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-details.controller.js +4 -2
  237. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-host-collections.controller.js +1 -1
  238. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-subscriptions.controller.js +1 -1
  239. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-add-subscriptions.html +1 -1
  240. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-details.html +1 -0
  241. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html +16 -8
  242. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-subscriptions-list.html +1 -1
  243. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +6 -6
  244. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.controller.js +1 -1
  245. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/content-view-composite-available-content-views.controller.js +1 -1
  246. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/content-view-composite-content-views-list.controller.js +1 -1
  247. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-docker-repositories.controller.js +1 -1
  248. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-ostree-repositories.controller.js +1 -1
  249. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-docker-repositories-list.controller.js +1 -1
  250. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-ostree-repositories-list.controller.js +1 -1
  251. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-versions.controller.js +1 -1
  252. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/available-errata-filter.controller.js +1 -1
  253. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/available-package-group-filter.controller.js +1 -1
  254. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/puppet-modules/content-view-puppet-module-names.controller.js +1 -1
  255. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/puppet-modules/content-view-puppet-module-versions.controller.js +1 -1
  256. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/puppet-modules/content-view-puppet-modules.controller.js +1 -1
  257. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/content-view-version-content.controller.js +1 -1
  258. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/debs.controller.js +1 -1
  259. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/deb-content-views.controller.js +1 -1
  260. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/deb-repositories.controller.js +1 -1
  261. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/environment-content.controller.js +1 -1
  262. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/details/erratum-repositories.controller.js +1 -1
  263. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/files/details/file-content-views.controller.js +1 -1
  264. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/files/details/file-repositories.controller.js +1 -1
  265. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/files/files.controller.js +1 -1
  266. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/details/host-collection-details.controller.js +5 -2
  267. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/details/views/host-collection-info.html +1 -1
  268. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/host-collections.controller.js +1 -1
  269. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +45 -4
  270. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de.po +58 -13
  271. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/es.po +46 -9
  272. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/fr.po +43 -6
  273. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/it.po +37 -1
  274. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ja.po +37 -1
  275. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ko.po +37 -1
  276. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt_BR.po +46 -9
  277. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ru.po +37 -1
  278. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_CN.po +37 -1
  279. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_TW.po +37 -1
  280. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/translations.js +4 -4
  281. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/organizations/fenced-pages.service.js +11 -2
  282. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/organizations/organization-selector.controller.js +5 -14
  283. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ostree-branches/details/ostree-branch-repositories.controller.js +1 -1
  284. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/details/package-repositories.controller.js +1 -1
  285. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/packages.controller.js +1 -1
  286. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/bulk/products-bulk-sync-plan-modal.controller.js +1 -1
  287. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/product-repositories.controller.js +1 -1
  288. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-manage-content.controller.js +1 -1
  289. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +1 -0
  290. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +3 -2
  291. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.controller.js +1 -1
  292. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/puppet-modules/details/puppet-module-content-views.controller.js +1 -1
  293. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/puppet-modules/details/puppet-module-repositories.controller.js +1 -1
  294. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/puppet-modules/puppet-modules.controller.js +1 -1
  295. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/views/content-access-mode-banner.html +1 -1
  296. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/details/sync-plan-details-info.controller.js +4 -3
  297. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/details/views/sync-plan-info.html +1 -1
  298. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/sync-plans.controller.js +1 -1
  299. data/lib/katello/engine.rb +8 -5
  300. data/lib/katello/permission_creator.rb +14 -9
  301. data/lib/katello/plugin.rb +20 -16
  302. data/lib/katello/tasks/clean_published_repo_directories.rake +3 -3
  303. data/lib/katello/tasks/pulp3_content_switchover.rake +24 -6
  304. data/lib/katello/tasks/pulp3_migration.rake +4 -2
  305. data/lib/katello/tasks/pulp3_post_migration_check.rake +3 -4
  306. data/lib/katello/tasks/reimport.rake +1 -1
  307. data/lib/katello/tasks/reports.rake +0 -12
  308. data/lib/katello/tasks/repository.rake +15 -2
  309. data/lib/katello/tasks/test.rake +15 -0
  310. data/lib/katello/tasks/unify_hosts.rake +1 -0
  311. data/lib/katello/tasks/upgrades/3.11/update_puppet_repos.rake +3 -3
  312. data/lib/katello/tasks/upgrades/3.12/remove_pulp2_notifier.rake +2 -2
  313. data/lib/katello/tasks/upgrades/3.8/clear_checksum_type.rake +2 -2
  314. data/lib/katello/version.rb +1 -1
  315. data/locale/action_names.rb +40 -40
  316. data/locale/bn/katello.po +137 -14
  317. data/locale/cs/katello.po +137 -14
  318. data/locale/de/katello.po +138 -15
  319. data/locale/en/katello.po +137 -14
  320. data/locale/es/katello.po +138 -15
  321. data/locale/fr/katello.po +138 -15
  322. data/locale/gu/katello.po +137 -14
  323. data/locale/hi/katello.po +137 -14
  324. data/locale/it/katello.po +138 -15
  325. data/locale/ja/katello.po +138 -15
  326. data/locale/katello.pot +976 -776
  327. data/locale/kn/katello.po +137 -14
  328. data/locale/ko/katello.po +138 -15
  329. data/locale/mr/katello.po +137 -14
  330. data/locale/or/katello.po +137 -14
  331. data/locale/pa/katello.po +137 -14
  332. data/locale/pt/katello.po +137 -14
  333. data/locale/pt_BR/katello.po +138 -15
  334. data/locale/ru/katello.po +138 -15
  335. data/locale/ta/katello.po +137 -14
  336. data/locale/te/katello.po +137 -14
  337. data/locale/zh_CN/katello.po +138 -15
  338. data/locale/zh_TW/katello.po +138 -15
  339. data/package.json +8 -25
  340. data/webpack/__mocks__/foremanReact/Root/Context/ForemanContext.js +3 -0
  341. data/webpack/components/ActionableDetail.js +63 -0
  342. data/webpack/components/Content/ContentTable.js +2 -2
  343. data/webpack/components/Content/Details/ContentDetailRepositoryTableSchema.js +1 -1
  344. data/webpack/components/Content/Details/ContentDetails.js +1 -1
  345. data/webpack/components/Content/__tests__/ContentTable.test.js +2 -2
  346. data/webpack/components/Content/__tests__/__snapshots__/ContentPage.test.js.snap +1 -1
  347. data/webpack/components/EditableSwitch.js +30 -0
  348. data/webpack/components/EditableTextInput/EditableTextInput.js +120 -0
  349. data/webpack/components/EditableTextInput/__tests__/editableTextInput.test.js +52 -0
  350. data/webpack/components/EditableTextInput/editableTextInput.scss +14 -0
  351. data/webpack/components/EditableTextInput/index.js +3 -0
  352. data/webpack/{scenes/ContentViews/components → components}/Loading.js +8 -5
  353. data/webpack/{move_to_pf → components}/LoadingState/LoadingState.js +0 -0
  354. data/webpack/{move_to_pf → components}/LoadingState/LoadingState.scss +0 -0
  355. data/webpack/{move_to_pf → components}/LoadingState/LoadingState.test.js +0 -0
  356. data/webpack/{move_to_pf → components}/LoadingState/__snapshots__/LoadingState.test.js.snap +0 -0
  357. data/webpack/{move_to_pf → components}/LoadingState/index.js +0 -0
  358. data/webpack/components/MultiSelect/index.js +1 -1
  359. data/webpack/{move_to_pf → components}/OptionTooltip/OptionTooltip.scss +0 -0
  360. data/webpack/{move_to_pf → components}/OptionTooltip/__tests__/OptionTooltip.test.js +0 -0
  361. data/webpack/{move_to_pf → components}/OptionTooltip/__tests__/__snapshots__/OptionTooltip.test.js.snap +0 -0
  362. data/webpack/{move_to_pf → components}/OptionTooltip/index.js +0 -0
  363. data/webpack/components/Search/Search.js +124 -0
  364. data/webpack/components/Search/Search.test.js +2 -1
  365. data/webpack/components/Search/__snapshots__/Search.test.js.snap +2 -0
  366. data/webpack/components/Search/__tests__/search.test.js +124 -0
  367. data/webpack/components/Search/index.js +11 -87
  368. data/webpack/{move_to_pf → components}/Select/Select.js +0 -0
  369. data/webpack/components/SelectOrg/SetOrganization.js +2 -2
  370. data/webpack/components/TabWrapper/TabWrapper.js +26 -0
  371. data/webpack/components/TabWrapper/index.js +3 -0
  372. data/webpack/components/TabbedView/TabbedView.js +38 -0
  373. data/webpack/components/TabbedView/TabbedView.scss +3 -0
  374. data/webpack/components/TabbedView/index.js +3 -0
  375. data/webpack/components/Table/EmptyStateMessage.js +61 -0
  376. data/webpack/{scenes/ContentViews/Table/TableWrapper.js → components/Table/MainTable.js} +23 -12
  377. data/webpack/components/Table/TableWrapper.js +94 -0
  378. data/webpack/{move_to_pf → components}/TooltipButton/TooltipButton.js +0 -0
  379. data/webpack/{move_to_pf → components}/TooltipButton/TooltipButton.scss +0 -0
  380. data/webpack/{move_to_pf → components}/TooltipButton/TooltipButton.test.js +0 -0
  381. data/webpack/{move_to_pf → components}/TooltipButton/__snapshots__/TooltipButton.test.js.snap +0 -0
  382. data/webpack/{move_to_pf → components}/TooltipButton/index.js +0 -0
  383. data/webpack/components/TypeAhead/TypeAhead.js +109 -0
  384. data/webpack/{move_to_pf → components}/TypeAhead/TypeAhead.scss +0 -0
  385. data/webpack/components/TypeAhead/helpers/commonPropTypes.js +35 -0
  386. data/webpack/components/TypeAhead/helpers/helpers.js +32 -0
  387. data/webpack/components/TypeAhead/index.js +3 -0
  388. data/webpack/{move_to_pf/TypeAhead → components/TypeAhead/pf3Search}/TypeAheadInput.js +3 -6
  389. data/webpack/{move_to_pf/TypeAhead → components/TypeAhead/pf3Search}/TypeAheadItems.js +3 -7
  390. data/webpack/components/TypeAhead/pf3Search/TypeAheadSearch.js +52 -0
  391. data/webpack/components/TypeAhead/pf4Search/TypeAheadInput.js +44 -0
  392. data/webpack/components/TypeAhead/pf4Search/TypeAheadInput.scss +11 -0
  393. data/webpack/components/TypeAhead/pf4Search/TypeAheadItems.js +57 -0
  394. data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.js +66 -0
  395. data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.scss +5 -0
  396. data/webpack/components/extensions/about/__tests__/SystemStatuses.test.js +1 -1
  397. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/components/CollapseSubscriptionGroupButton.js +0 -0
  398. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/components/CollapseSubscriptionGroupButton.test.js +0 -0
  399. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/components/Table.js +0 -0
  400. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/components/Table.test.js +0 -0
  401. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/components/TableBody.js +0 -0
  402. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/components/TableBody.test.js +0 -0
  403. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/components/TableBodyMessage.js +0 -0
  404. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/components/TableBodyMessage.test.js +0 -0
  405. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/components/TableFixtures.js +0 -0
  406. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/components/TableSelectionCell.js +0 -0
  407. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/components/TableSelectionCell.test.js +0 -0
  408. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/components/TableSelectionHeaderCell.js +0 -0
  409. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/components/TableSelectionHeaderCell.test.js +0 -0
  410. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/components/__snapshots__/CollapseSubscriptionGroupButton.test.js.snap +0 -0
  411. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/components/__snapshots__/Table.test.js.snap +0 -0
  412. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/components/__snapshots__/TableBody.test.js.snap +0 -0
  413. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/components/__snapshots__/TableBodyMessage.test.js.snap +0 -0
  414. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/components/__snapshots__/TableSelectionCell.test.js.snap +0 -0
  415. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/components/__snapshots__/TableSelectionHeaderCell.test.js.snap +0 -0
  416. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/components/index.js +0 -0
  417. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/formatters/EntitlementsInlineEditFormatter.js +1 -1
  418. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/formatters/__tests__/EntitlementsInlineEditFormatter.test.js +0 -0
  419. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/formatters/__tests__/__snapshots__/EntitlementsInlineEditFormatter.test.js.snap +0 -0
  420. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/formatters/cellFormatter.js +0 -0
  421. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/formatters/collapseableAndSelectionCellFormatter.js +0 -0
  422. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/formatters/ellipsisCellFormatter.js +0 -0
  423. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/formatters/headerFormatter.js +0 -0
  424. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/formatters/index.js +0 -0
  425. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/formatters/selectionCellFormatter.js +0 -0
  426. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/formatters/selectionHeaderCellFormatter.js +0 -0
  427. data/webpack/{move_to_foreman/components/common/table → components/pf3Table}/index.js +0 -0
  428. data/webpack/{move_to_pf → components}/react-bootstrap-select/index.js +0 -0
  429. data/webpack/containers/Application/config.js +9 -4
  430. data/webpack/containers/Application/overrides.scss +5 -0
  431. data/webpack/global_test_setup.js +3 -1
  432. data/webpack/redux/OrganizationProducts/OrganizationProductsActions.js +1 -1
  433. data/webpack/redux/OrganizationProducts/__tests__/OrganizationProductsActions.test.js +2 -2
  434. data/webpack/redux/actions/RedHatRepositories/enabled.js +1 -1
  435. data/webpack/redux/actions/RedHatRepositories/repositorySetRepositories.js +1 -1
  436. data/webpack/redux/reducers/index.js +2 -0
  437. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsActions.js +1 -1
  438. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsTableSchema.js +1 -1
  439. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsActions.js +1 -1
  440. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetailsActions.test.js +2 -2
  441. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsTable.test.js +1 -1
  442. data/webpack/scenes/ContentViews/ContentViewSelectors.js +1 -2
  443. data/webpack/scenes/ContentViews/ContentViewsActions.js +4 -4
  444. data/webpack/scenes/ContentViews/ContentViewsConstants.js +4 -1
  445. data/webpack/scenes/ContentViews/ContentViewsPage.js +12 -6
  446. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +44 -0
  447. data/webpack/scenes/ContentViews/Details/ContentViewDetailReducer.js +23 -0
  448. data/webpack/scenes/ContentViews/{details → Details}/ContentViewDetailSelectors.js +3 -0
  449. data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +70 -0
  450. data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +116 -0
  451. data/webpack/scenes/ContentViews/{details → Details}/DetailsContainer.js +8 -4
  452. data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetail.test.js +101 -0
  453. data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetails.fixtures.json +106 -0
  454. data/webpack/scenes/ContentViews/Details/contentViewInfo.scss +8 -0
  455. data/webpack/scenes/ContentViews/Details/index.js +7 -0
  456. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +51 -36
  457. data/webpack/scenes/ContentViews/Table/tableDataGenerator.js +47 -44
  458. data/webpack/scenes/ContentViews/__tests__/basicContentViews.fixtures.js +31 -0
  459. data/webpack/scenes/ContentViews/__tests__/contentViewList.fixtures.json +2 -1
  460. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +173 -23
  461. data/webpack/scenes/ContentViews/components/ContentViewIcon.js +26 -0
  462. data/webpack/scenes/ContentViews/components/{contentViewName.scss → contentViewIcon.scss} +0 -0
  463. data/webpack/scenes/ModuleStreams/Details/ModuleStreamDetailsActions.js +1 -1
  464. data/webpack/scenes/ModuleStreams/Details/Profiles/TableSchema.js +1 -1
  465. data/webpack/scenes/ModuleStreams/Details/__tests__/ModuleStreamDetailsActions.test.js +2 -2
  466. data/webpack/scenes/ModuleStreams/ModuleStreamsActions.js +1 -1
  467. data/webpack/scenes/ModuleStreams/ModuleStreamsTableSchema.js +1 -1
  468. data/webpack/scenes/ModuleStreams/__tests__/ModuleStreamsTable.test.js +1 -1
  469. data/webpack/scenes/Organizations/OrganizationSelectors.js +14 -0
  470. data/webpack/scenes/Products/ProductActions.js +1 -1
  471. data/webpack/scenes/RedHatRepositories/RedHatRepositoriesPage.js +1 -1
  472. data/webpack/scenes/Settings/SettingsConstants.js +3 -0
  473. data/webpack/scenes/Settings/SettingsReducer.js +33 -0
  474. data/webpack/scenes/Settings/SettingsSelectors.js +4 -0
  475. data/webpack/scenes/Settings/index.js +2 -1
  476. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailActions.js +1 -1
  477. data/webpack/scenes/Subscriptions/Details/SubscriptionDetails.js +1 -1
  478. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +67 -91
  479. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.scss +15 -0
  480. data/webpack/scenes/Subscriptions/Manifest/ManifestActions.js +43 -1
  481. data/webpack/scenes/Subscriptions/Manifest/ManifestConstants.js +8 -0
  482. data/webpack/scenes/Subscriptions/Manifest/ManifestHistoryTableSchema.js +1 -1
  483. data/webpack/scenes/Subscriptions/Manifest/SimpleContentAccess.js +78 -0
  484. data/webpack/scenes/Subscriptions/Manifest/__tests__/ManageManifestModal.test.js +2 -0
  485. data/webpack/scenes/Subscriptions/Manifest/__tests__/ManifestActions.test.js +56 -1
  486. data/webpack/scenes/Subscriptions/Manifest/__tests__/SimpleContentAccess.test.js +100 -0
  487. data/webpack/scenes/Subscriptions/Manifest/__tests__/__snapshots__/ManageManifestModal.test.js.snap +6 -6
  488. data/webpack/scenes/Subscriptions/Manifest/__tests__/manifest.fixtures.js +36 -0
  489. data/webpack/scenes/Subscriptions/Manifest/index.js +4 -5
  490. data/webpack/scenes/Subscriptions/SubscriptionActions.js +1 -1
  491. data/webpack/scenes/Subscriptions/SubscriptionConstants.js +4 -0
  492. data/webpack/scenes/Subscriptions/SubscriptionHelpers.js +0 -3
  493. data/webpack/scenes/Subscriptions/SubscriptionReducer.js +48 -12
  494. data/webpack/scenes/Subscriptions/SubscriptionsPage.js +29 -18
  495. data/webpack/scenes/Subscriptions/SubscriptionsSelectors.js +2 -2
  496. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/UpstreamSubscriptionsActions.js +1 -1
  497. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/UpstreamSubscriptionsPage.js +2 -2
  498. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/UpstreamSubscriptionsTableSchema.js +1 -1
  499. data/webpack/scenes/Subscriptions/__tests__/SubscriptionHelpers.test.js +0 -11
  500. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsReducer.test.js +24 -0
  501. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsActions.test.js.snap +2 -2
  502. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsPage.test.js.snap +4 -4
  503. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsReducer.test.js.snap +114 -1
  504. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionTypeFormatter.js +2 -2
  505. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionsTable.js +27 -21
  506. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionsTableHelpers.js +6 -2
  507. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionsTableSchema.js +2 -2
  508. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/__snapshots__/SubscriptionTypeFormatter.test.js.snap +3 -3
  509. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/components/Table.js +1 -1
  510. data/webpack/scenes/Subscriptions/components/SubscriptionsToolbar/SubscriptionsToolbar.js +28 -3
  511. data/webpack/scenes/Subscriptions/components/SubscriptionsToolbar/__snapshots__/SubscriptionsToolbar.test.js.snap +5 -10
  512. data/webpack/scenes/Subscriptions/index.js +6 -2
  513. data/webpack/test-utils/nockWrapper.js +39 -5
  514. data/webpack/test-utils/react-testing-lib-wrapper.js +35 -9
  515. data/webpack/{move_to_foreman/common → utils}/helpers.js +12 -8
  516. data/webpack/utils/useEventListener.js +37 -0
  517. metadata +206 -106
  518. data/vendor/assets/stylesheets/katello/jquery.loadmask.css.scss +0 -40
  519. data/vendor/assets/stylesheets/katello/ui.spinner.css.scss +0 -3
  520. data/webpack/__mocks__/foremanReact/components/ForemanModal/ForemanModalActions.js +0 -2
  521. data/webpack/__mocks__/foremanReact/components/ForemanModal/ForemanModalSelectors.js +0 -2
  522. data/webpack/__mocks__/foremanReact/components/ForemanModal/index.js +0 -4
  523. data/webpack/__mocks__/foremanReact/components/Settings/SettingsActions.js +0 -4
  524. data/webpack/__mocks__/foremanReact/components/Settings/SettingsConstants.js +0 -2
  525. data/webpack/move_to_pf/TypeAhead/TypeAhead.js +0 -138
  526. data/webpack/move_to_pf/TypeAhead/helpers.js +0 -5
  527. data/webpack/scenes/ContentViews/components/ContentViewName.js +0 -33
  528. data/webpack/scenes/ContentViews/components/EmptyStateMessage.js +0 -43
  529. data/webpack/scenes/ContentViews/details/ContentViewDetailActions.js +0 -12
  530. data/webpack/scenes/ContentViews/expansions/RepositoriesExpansion.js +0 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0f0cbc00333e5f45573f080439a79710d656562078e54733dddbf2838202966b
4
- data.tar.gz: 066d69fb7ba3574b68598e545be08c7fa229f9b952ce97ca7be1fabc3550e8d3
3
+ metadata.gz: bd31f846e3b9c24a2a5881eb6f7c0a43e5cd3f7d05272d4dae99cb04dcc579e9
4
+ data.tar.gz: 75d49f944d6d534c49f1e65394ddf1cfee2d3b97aab81032389e2bc815505bd6
5
5
  SHA512:
6
- metadata.gz: 28e6f171608b10bb8adf3531e4d336a8bf3a4df5787224de2fb58461755783551d440946ac64577890e8acae045b098a3db4c6cb16d5e3715784b4f54374cd5b
7
- data.tar.gz: 54332104edef4e69b0062792547808299172fcf1c5f915e6d7a7d7825a3bf3599dd4dfd6c8d51ab683c1aa17ded1e595f28462f049f781cccf4ad5e34d4b0989
6
+ metadata.gz: 025b2f29030816a1195035f52c39cd3557e6d54c4ccd7adac54c5dff865a856a8754956bb79622fdc8d0e3ada7ebbce8c758c8f181076b1ceb4f23ba32b1a3a6
7
+ data.tar.gz: 11cf4ac7f7ee8b40f8138a52bc979685a57f7fe2b522a8a52d00399635e4e9f4e8c704d617e3739985feabf78a9848c4db507f31d8309269f43ede60c5938bf3
@@ -1,10 +1,3 @@
1
- /**
2
- * = require "katello/jquery.loadmask.css"
3
- * = require "katello/jquery-ui-1.8.11.custom.css"
4
- * = require "katello/jquery.treeTable.css"
5
- * = require "katello/ui.spinner.css"
6
- */
7
-
8
1
  @import "katello/overrides";
9
2
  @import "katello/katello_base";
10
3
  @import "katello/look";
@@ -18,6 +11,9 @@
18
11
  @import "katello/generic";
19
12
  @import "katello/notifications";
20
13
 
14
+ @import "katello/jquery.treeTable";
15
+ @import "katello/jquery-ui-1.8.11.custom.css";
16
+
21
17
  body {
22
18
  background-color: white;
23
19
  }
@@ -10,8 +10,8 @@ module Katello
10
10
  before_action :registry_authorize, except: [:token, :v1_search, :catalog]
11
11
  before_action :authorize_repository_read, only: [:pull_manifest, :tags_list]
12
12
  before_action :authorize_repository_write, only: [:push_manifest]
13
- skip_before_action :check_content_type, only: [:start_upload_blob, :upload_blob, :finish_upload_blob,
14
- :chunk_upload_blob, :push_manifest]
13
+ skip_before_action :check_media_type, only: [:start_upload_blob, :upload_blob, :finish_upload_blob,
14
+ :chunk_upload_blob, :push_manifest]
15
15
 
16
16
  wrap_parameters false
17
17
 
@@ -200,7 +200,9 @@ module Katello
200
200
  end
201
201
 
202
202
  def pull_blob
203
- r = Resources::Registry::Proxy.get(@_request.fullpath, 'Accept' => request.headers['Accept'])
203
+ headers = {}
204
+ headers['Accept'] = request.headers['Accept'] if request.headers['Accept']
205
+ r = Resources::Registry::Proxy.get(@_request.fullpath, headers)
204
206
  render json: r
205
207
  end
206
208
 
@@ -10,7 +10,7 @@ module Katello
10
10
  before_action :find_host, :only => [:upload_package_profile, :upload_profiles, :deb_package_profile]
11
11
  before_action :authorize_client_or_user, :only => [:upload_package_profile, :upload_profiles, :deb_package_profile]
12
12
 
13
- skip_before_action :check_content_type
13
+ skip_before_action :check_media_type
14
14
 
15
15
  #api :PUT, "/consumers/:id/packages", N_("Update installed packages")
16
16
  #api :PUT, "/consumers/:id/profile", N_("Update installed packages")
@@ -26,7 +26,7 @@ module Katello
26
26
  before_action :set_organization_id, :except => [:hypervisors_update, :async_hypervisors_update]
27
27
  before_action :find_hypervisor_organization, :only => [:async_hypervisors_update, :hypervisors_update]
28
28
 
29
- before_action :check_content_type, :except => :async_hypervisors_update
29
+ before_action :check_media_type, :except => :async_hypervisors_update
30
30
 
31
31
  prepend_before_action :convert_owner_to_organization_id, :except => [:hypervisors_update, :async_hypervisors_update], :if => lambda { params.key?(:owner) }
32
32
  prepend_before_action :convert_organization_label_to_id, :only => [:rhsm_index, :consumer_activate, :consumer_create], :if => lambda { params.key?(:organization_id) }
@@ -1,4 +1,5 @@
1
1
  module Katello
2
+ # rubocop:disable Metrics/ClassLength
2
3
  class Api::V2::ActivationKeysController < Api::V2::ApiController
3
4
  include Katello::Concerns::FilteredAutoCompleteSearch
4
5
  include Katello::Concerns::Api::V2::ContentOverridesController
@@ -11,6 +12,7 @@ module Katello
11
12
  :content_override, :add_subscriptions, :remove_subscriptions,
12
13
  :subscriptions]
13
14
  before_action :authorize
15
+ before_action :verify_simple_content_access_disabled, :only => [:add_subscriptions]
14
16
 
15
17
  wrap_parameters :include => (ActivationKey.attribute_names + %w(host_collection_ids service_level auto_attach purpose_role purpose_usage purpose_addons content_view_environment))
16
18
 
@@ -348,5 +350,11 @@ module Katello
348
350
 
349
351
  key_params
350
352
  end
353
+
354
+ def verify_simple_content_access_disabled
355
+ if @activation_key.organization.simple_content_access?
356
+ fail HttpErrors::BadRequest, _("The specified organization is in Simple Content Access mode. Attaching subscriptions is disabled")
357
+ end
358
+ end
351
359
  end
352
360
  end
@@ -5,7 +5,7 @@ module Katello
5
5
  include Api::V2::Rendering
6
6
  include Api::V2::ErrorHandling
7
7
  include ::Foreman::Controller::CsvResponder
8
- include Concerns::Api::V2::AssociationsPermissionCheck
8
+ include Concerns::Api::V2::Authorization
9
9
 
10
10
  # support for session (thread-local) variables must be the last filter in this class
11
11
  include Foreman::ThreadSession::Cleaner
@@ -4,7 +4,7 @@ module Katello
4
4
  before_action :authorize
5
5
  before_action :find_organization, :only => [:create, :index, :auto_complete_search]
6
6
  before_action :find_content_credential, :only => [:show, :update, :destroy, :content, :set_content]
7
- skip_before_action :check_content_type, :only => [:create, :content, :set_content]
7
+ skip_before_action :check_media_type, :only => [:create, :content, :set_content]
8
8
 
9
9
  def resource_class
10
10
  Katello::GpgKey
@@ -1,7 +1,7 @@
1
1
  module Katello
2
2
  class Api::V2::ContentUploadsController < Api::V2::ApiController
3
3
  before_action :find_repository
4
- skip_before_action :check_content_type, :only => [:update]
4
+ skip_before_action :check_media_type, :only => [:update]
5
5
 
6
6
  include ::Foreman::Controller::FilterParameters
7
7
  filter_parameters :content
@@ -13,8 +13,8 @@ module Katello
13
13
  param :content_type, RepositoryTypeManager.uploadable_content_types.map(&:label), :required => false, :desc => N_("content type ('deb', 'docker_manifest', 'file', 'ostree', 'puppet_module', 'rpm', 'srpm')")
14
14
  def create
15
15
  content_type = params[:content_type] || ::Katello::RepositoryTypeManager.find(@repository.content_type).default_managed_content_type.label
16
- unit_type_id = SmartProxy.pulp_master.content_service(content_type).content_type
17
- render :json => @repository.backend_content_service(::SmartProxy.pulp_master).create_upload(params[:size], params[:checksum], unit_type_id)
16
+ unit_type_id = SmartProxy.pulp_primary.content_service(content_type).content_type
17
+ render :json => @repository.backend_content_service(::SmartProxy.pulp_primary).create_upload(params[:size], params[:checksum], unit_type_id)
18
18
  end
19
19
 
20
20
  api :PUT, "/repositories/:repository_id/content_uploads/:id", N_("Upload a chunk of the file's content")
@@ -24,7 +24,7 @@ module Katello
24
24
  param :offset, :number, :required => true, :desc => N_("The offset in the file where the content starts")
25
25
  param :content, File, :required => true, :desc => N_("The actual file contents")
26
26
  def update
27
- @repository.backend_content_service(::SmartProxy.pulp_master)
27
+ @repository.backend_content_service(::SmartProxy.pulp_primary)
28
28
  .upload_chunk(params[:id], params[:offset], params[:content], params[:size])
29
29
  head :no_content
30
30
  end
@@ -33,7 +33,7 @@ module Katello
33
33
  param :repository_id, :number, :required => true, :desc => N_("Repository id")
34
34
  param :id, String, :required => true, :desc => N_("Upload request id")
35
35
  def destroy
36
- @repository.backend_content_service(::SmartProxy.pulp_master).delete_upload(params[:id])
36
+ @repository.backend_content_service(::SmartProxy.pulp_primary).delete_upload(params[:id])
37
37
  head :no_content
38
38
  end
39
39
 
@@ -0,0 +1,47 @@
1
+ module Katello
2
+ class Api::V2::ContentViewRepositoriesController < Api::V2::ApiController
3
+ # There are other Content View Repository related endpoints that are in RepositoriesController
4
+ include Katello::Concerns::FilteredAutoCompleteSearch
5
+
6
+ before_action :find_content_view
7
+ before_action :find_organization_from_cv
8
+
9
+ # content_views/:id/repositories/show_all
10
+ # Shows all repositories, added and available to add, for a content view
11
+ # Undocumented endpoint since the functionality exists in separate calls already.
12
+ # This was created for ease of pagination and search for the UI
13
+ param :id, :number, desc: N_("Content View id"), required: true
14
+ def show_all
15
+ kr = Katello::Repository.table_name
16
+ krr = Katello::RootRepository.table_name
17
+ kcvr = Katello::ContentViewRepository.table_name
18
+ join_query = <<-SQL
19
+ LEFT OUTER JOIN #{kcvr}
20
+ ON #{kr}.id = #{kcvr}.repository_id
21
+ AND #{kcvr}.content_view_id = #{@content_view.id}
22
+ SQL
23
+ order_query = <<-SQL
24
+ CAST (#{kcvr}.repository_id as BOOLEAN) ASC, #{krr}.name
25
+ SQL
26
+
27
+ query = Katello::Repository.readable.in_default_view.in_organization(@organization)
28
+ # Use custom sort to perform the join and order since we need to order by specific content_view
29
+ # and the ORDER BY query needs access to the katello_content_view_repositories table
30
+ custom_sort = ->(sort_query) { sort_query.joins(:root).joins(join_query).order(order_query) }
31
+ options = { resource_class: Katello::Repository, custom_sort: custom_sort }
32
+ repos = scoped_search(query, nil, nil, options)
33
+
34
+ respond_for_index(:collection => repos)
35
+ end
36
+
37
+ private
38
+
39
+ def find_content_view
40
+ @content_view = ContentView.find(params[:content_view_id])
41
+ end
42
+
43
+ def find_organization_from_cv
44
+ @organization = @content_view.organization
45
+ end
46
+ end
47
+ end
@@ -82,33 +82,64 @@ module Katello
82
82
  respond_for_async :resource => task
83
83
  end
84
84
 
85
+ api :GET, "/content_view_versions/export_histories", N_("Show the export history for a content view version")
86
+ param :content_view_version_id, :number, :desc => N_("Content view version identifier"), :required => false
87
+ param :content_view_id, :number, :desc => N_("Content view identifier"), :required => false
88
+ param :destination_server, String, :desc => N_("Destination Server name"), :required => false
89
+ param :organization_id, :number, :desc => N_("Organization identifier"), :required => false
90
+ param_group :search, Api::V2::ApiController
91
+ add_scoped_search_description_for(ContentViewVersionExportHistory)
92
+ def export_histories
93
+ history = ContentViewVersionExportHistory.readable
94
+ history = history.where(:content_view_version_id => params[:content_view_version_id]) unless params[:content_view_version_id].blank?
95
+ history = history.where(:destination_server => params[:destination_server]) unless params[:destination_server].blank?
96
+ history = history.with_organization_id(params[:organization_id]) unless params[:organization_id].blank?
97
+ history = history.with_content_view_id(params[:content_view_id]) unless params[:content_view_id].blank?
98
+ respond_for_index(:collection => scoped_search(history, 'id', 'asc', resource_class: ContentViewVersionExportHistory),
99
+ :template => '../../../api/v2/content_view_version_export_histories/index')
100
+ end
101
+
85
102
  api :POST, "/content_view_versions/:id/export", N_("Export a content view version"), :deprecated => true
86
103
  param :id, :number, :desc => N_("Content view version identifier"), :required => true
87
- param :export_to_iso, :bool, :desc => N_("Export to ISO format"), :required => false
88
- param :iso_mb_size, :number, :desc => N_("maximum size of each ISO in MB"), :required => false
89
- param :since, Date, :desc => N_("Optional date of last export (ex: 2010-01-01T12:00:00Z)"), :required => false
104
+ param :destination_server, String, :desc => N_("Destination Server name, required for Pulp3")
105
+ param :export_to_iso, :bool, :desc => N_("Export to ISO format. Relevant only for Pulp 2 repositories"), :required => false
106
+ param :iso_mb_size, :number, :desc => N_("maximum size of each ISO in MB. Relevant only for Pulp 2 repositories"), :required => false
107
+ param :since, Date, :desc => N_("Optional date of last export (ex: 2010-01-01T12:00:00Z). Relevant only for Pulp 2 repositories"), :required => false
90
108
  def export
91
- ::Foreman::Deprecation.api_deprecation_warning("Export is being deprecated and will be removed in a future version of Katello. Use hammer content-view version export instead.")
92
- if params[:export_to_iso].blank? && params[:iso_mb_size].present?
93
- fail HttpErrors::BadRequest, _("ISO export must be enabled when specifying ISO size")
94
- end
109
+ if SmartProxy.pulp_primary.pulp3_repository_type_support?(Katello::Repository::YUM_TYPE)
110
+ invalid_params = [:export_to_iso, :iso_mb_size, :since].reject { |param| params[param].blank? }
111
+ unless invalid_params.empty?
112
+ fail HttpErrors::BadRequest, _("Invalid parameters provided - %{params}. These are only relevant for Pulp 2 repositories" % { params: invalid_params.join(', ')})
113
+ end
95
114
 
96
- if (repos = @version.content_view.on_demand_repositories).any?
97
- fail HttpErrors::BadRequest, _("This content view has on demand repositories that cannot be exported: %{repos}" % {repos: repos.pluck(:label).join(", ")})
98
- end
115
+ if params[:destination_server].blank?
116
+ fail HttpErrors::BadRequest, _("Destination Server Name required for Pulp3 repositories")
117
+ end
118
+
119
+ task = async_task(::Actions::Pulp3::Orchestration::ContentViewVersion::Export, @version, destination_server: params[:destination_server])
120
+ else
121
+ ::Foreman::Deprecation.api_deprecation_warning("Export is being deprecated and will be removed in a future version of Katello. Use hammer content-view version export instead.")
122
+ if params[:export_to_iso].blank? && params[:iso_mb_size].present?
123
+ fail HttpErrors::BadRequest, _("ISO export must be enabled when specifying ISO size")
124
+ end
99
125
 
100
- if params[:since].present?
101
- begin
102
- params[:since].to_datetime
103
- rescue
104
- raise HttpErrors::BadRequest, _("Invalid date provided.")
126
+ if (repos = @version.content_view.on_demand_repositories).any?
127
+ fail HttpErrors::BadRequest, _("This content view has on demand repositories that cannot be exported: %{repos}" % {repos: repos.pluck(:label).join(", ")})
128
+ end
129
+
130
+ if params[:since].present?
131
+ begin
132
+ params[:since].to_datetime
133
+ rescue
134
+ raise HttpErrors::BadRequest, _("Invalid date provided.")
135
+ end
105
136
  end
137
+ task = async_task(::Actions::Katello::ContentViewVersion::Export, @version,
138
+ ::Foreman::Cast.to_bool(params[:export_to_iso]),
139
+ params[:since].try(:to_datetime),
140
+ params[:iso_mb_size])
106
141
  end
107
142
 
108
- task = async_task(::Actions::Katello::ContentViewVersion::Export, @version,
109
- ::Foreman::Cast.to_bool(params[:export_to_iso]),
110
- params[:since].try(:to_datetime),
111
- params[:iso_mb_size])
112
143
  respond_for_async :resource => task
113
144
  end
114
145
 
@@ -5,7 +5,7 @@ module Katello
5
5
  before_action :authorize
6
6
  before_action :find_organization, :only => [:create, :index, :auto_complete_search]
7
7
  before_action :find_gpg_key, :only => [:show, :update, :destroy, :content, :set_content]
8
- skip_before_action :check_content_type, :only => [:create, :content, :set_content]
8
+ skip_before_action :check_media_type, :only => [:create, :content, :set_content]
9
9
 
10
10
  def_param_group :gpg_key do
11
11
  param :name, :identifier, :action_aware => true, :required => true, :desc => N_("identifier of the gpg key")
@@ -39,7 +39,9 @@ module Katello
39
39
  respond_for_index :collection => @collection
40
40
  end
41
41
 
42
- def index_response
42
+ def index_response(reload_host = false)
43
+ # Host needs to be reloaded because of lazy accessor
44
+ @host.reload if reload_host
43
45
  entitlements = @host.subscription_facet.candlepin_consumer.entitlements
44
46
  subscriptions = entitlements.map { |entitlement| ::Katello::HostSubscriptionPresenter.new(entitlement) }
45
47
  full_result_response(subscriptions)
@@ -53,7 +55,7 @@ module Katello
53
55
  end
54
56
 
55
57
  sync_task(::Actions::Katello::Host::AutoAttachSubscriptions, @host)
56
- respond_for_index(:collection => index_response, :template => "index")
58
+ respond_for_index(:collection => index_response(true), :template => "index")
57
59
  end
58
60
 
59
61
  api :DELETE, "/hosts/:host_id/subscriptions/", N_("Unregister the host as a subscription consumer")
@@ -124,7 +126,7 @@ module Katello
124
126
  end
125
127
 
126
128
  sync_task(::Actions::Katello::Host::RemoveSubscriptions, @host, pool_id_quantities.values)
127
- respond_for_index(:collection => index_response, :template => "index")
129
+ respond_for_index(:collection => index_response(true), :template => "index")
128
130
  end
129
131
 
130
132
  api :PUT, "/hosts/:host_id/subscriptions/add_subscriptions", N_("Add a subscription to a host")
@@ -134,12 +136,16 @@ module Katello
134
136
  param :quantity, :number, :desc => N_("Quantity of this subscriptions to add"), :required => true
135
137
  end
136
138
  def add_subscriptions
139
+ if @host.organization.simple_content_access?
140
+ fail ::Katello::HttpErrors::BadRequest, _("This host's organization is in Simple Content Access mode. Attaching subscriptions is disabled.")
141
+ end
142
+
137
143
  pools_with_quantities = params.require(:subscriptions).map do |sub_params|
138
144
  PoolWithQuantities.new(Pool.with_identifier(sub_params['id']), sub_params['quantity'].to_i)
139
145
  end
140
146
 
141
147
  sync_task(::Actions::Katello::Host::AttachSubscriptions, @host, pools_with_quantities)
142
- respond_for_index(:collection => index_response, :template => "index")
148
+ respond_for_index(:collection => index_response(true), :template => "index")
143
149
  end
144
150
 
145
151
  api :PUT, "/hosts/:host_id/subscriptions/content_override", N_("Set content overrides for the host")
@@ -10,9 +10,11 @@ module Katello
10
10
  before_action :find_deletable_hosts, :only => [:destroy_hosts]
11
11
  before_action :find_readable_hosts, :only => [:applicable_errata, :installable_errata, :available_incremental_updates]
12
12
  before_action :find_errata, :only => [:available_incremental_updates]
13
+ before_action :find_organization, :only => [:add_subscriptions]
13
14
  before_action :deprecate_katello_agent, :only => [:install_content, :update_content, :remove_content]
14
15
 
15
16
  before_action :validate_content_action, :only => [:install_content, :update_content, :remove_content]
17
+ before_action :validate_organization, :only => [:add_subscriptions]
16
18
 
17
19
  # disable *_count fields on erratum rabl, since they perform N+1 queries
18
20
  before_action :disable_erratum_hosts_count
@@ -173,6 +175,10 @@ module Katello
173
175
  param :quantity, :number, :desc => N_("Quantity of this subscriptions to add"), :required => true
174
176
  end
175
177
  def add_subscriptions
178
+ if @organization.simple_content_access?
179
+ fail HttpErrors::BadRequest, _("The specified organization is in Simple Content Access mode. Attaching subscriptions is disabled")
180
+ end
181
+
176
182
  pools_with_quantities = params.require(:subscriptions).map do |sub_params|
177
183
  PoolWithQuantities.new(Pool.find(sub_params['id']), sub_params['quantity'])
178
184
  end
@@ -295,6 +301,10 @@ module Katello
295
301
  find_bulk_hosts(:destroy_hosts, params)
296
302
  end
297
303
 
304
+ def validate_organization
305
+ fail HttpErrors::BadRequest, _("Organization ID is required") if @organization.blank?
306
+ end
307
+
298
308
  def validate_host_collection_membership_limit
299
309
  max_hosts_exceeded = []
300
310
  host_ids = @hosts.map(&:id)
@@ -13,9 +13,10 @@ module Katello
13
13
  before_action :find_product, :only => [:index, :auto_complete_search]
14
14
  before_action :find_product_for_create, :only => [:create]
15
15
  before_action :find_organization_from_product, :only => [:create]
16
- before_action :find_repository, :only => [:show, :update, :destroy, :sync, :export,
17
- :remove_content, :upload_content, :republish,
18
- :import_uploads, :gpg_key_content, :verify_checksum]
16
+ before_action :find_unauthorized_katello_resource, :only => [:gpg_key_content]
17
+ before_action :find_authorized_katello_resource, :only => [:show, :update, :destroy, :sync, :export,
18
+ :remove_content, :upload_content, :republish,
19
+ :import_uploads, :verify_checksum]
19
20
  before_action :find_content, :only => :remove_content
20
21
  before_action :find_organization_from_repo, :only => [:update]
21
22
  before_action :error_on_rh_product, :only => [:create]
@@ -26,7 +27,7 @@ module Katello
26
27
  before_action(:only => [:create, :update]) { find_content_credential CONTENT_CREDENTIAL_SSL_CLIENT_KEY_TYPE }
27
28
  before_action :check_ignore_global_proxy, :only => [ :update, :create ]
28
29
  skip_before_action :authorize, :only => [:gpg_key_content]
29
- skip_before_action :check_content_type, :only => [:upload_content]
30
+ skip_before_action :check_media_type, :only => [:upload_content]
30
31
 
31
32
  def custom_index_relation(collection)
32
33
  collection.includes(:product)
@@ -43,6 +44,7 @@ module Katello
43
44
  param :docker_upstream_name, String, :desc => N_("Name of the upstream docker repository")
44
45
  param :docker_tags_whitelist, Array, :desc => N_("Comma separated list of tags to sync for Container Image repository")
45
46
  param :download_policy, ["immediate", "on_demand", "background"], :desc => N_("download policy for yum repos (either 'immediate', 'on_demand', or 'background (deprecated)')")
47
+ param :download_concurrency, :number, :desc => N_("Used to determine download concurrency of the repository in pulp3. Use value less than 20. Defaults to 10")
46
48
  param :mirror_on_sync, :bool, :desc => N_("true if this repository when synced has to be mirrored from the source and stale rpms removed")
47
49
  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")
48
50
  param :upstream_username, String, :desc => N_("Username of the upstream repository user used for authentication")
@@ -336,6 +338,7 @@ module Katello
336
338
  api :PUT, "/repositories/:id", N_("Update a repository")
337
339
  param :id, :number, :required => true, :desc => N_("repository ID")
338
340
  param :name, String, :required => false
341
+ param :description, String, :desc => N_("description of the repository"), :required => false
339
342
  param_group :repo
340
343
  def update
341
344
  repo_params = repository_params
@@ -445,16 +448,17 @@ module Katello
445
448
  protected
446
449
 
447
450
  def find_product
448
- @product = Product.find(params[:product_id]) if params[:product_id]
451
+ if params[:product_id]
452
+ @product = Product.readable.find_by(id: params[:product_id])
453
+ throw_resource_not_found(name: 'product', id: params[:product_id]) if @product.nil?
454
+ end
455
+
449
456
  find_organization_from_product if @organization.nil? && @product
450
457
  end
451
458
 
452
459
  def find_product_for_create
453
- @product = Product.find(params[:product_id])
454
- end
455
-
456
- def find_repository
457
- @repository = Repository.find(params[:id])
460
+ @product = Product.editable.find_by(id: params[:product_id])
461
+ throw_resource_not_found(name: 'product', id: params[:product_id]) if @product.nil?
458
462
  end
459
463
 
460
464
  def find_content_credential(content_type)
@@ -471,7 +475,7 @@ module Katello
471
475
  end
472
476
 
473
477
  def repository_params
474
- keys = [:download_policy, :mirror_on_sync, :arch, :verify_ssl_on_sync, :upstream_password, :upstream_username,
478
+ keys = [:download_policy, :mirror_on_sync, :arch, :verify_ssl_on_sync, :upstream_password, :upstream_username, :download_concurrency,
475
479
  :ostree_upstream_sync_depth, :ostree_upstream_sync_policy,
476
480
  :deb_releases, :deb_components, :deb_architectures, :description, :http_proxy_policy, :http_proxy_id,
477
481
  {:ignorable_content => []}