diff --git a/app/controllers/katello/api/registry/registry_proxies_controller.rb b/app/controllers/katello/api/registry/registry_proxies_controller.rb index f224f725e49..e7dd7a9bd3b 100644 --- a/app/controllers/katello/api/registry/registry_proxies_controller.rb +++ b/app/controllers/katello/api/registry/registry_proxies_controller.rb @@ -1,3 +1,4 @@ +require 'pry' module Katello # rubocop:disable Metrics/ClassLength class Api::Registry::RegistryProxiesController < Api::V2::ApiController @@ -5,7 +6,7 @@ class Api::Registry::RegistryProxiesController < Api::V2::ApiController before_action :confirm_settings skip_before_action :authorize before_action :optional_authorize, only: [:token, :catalog] - before_action :registry_authorize, except: [:token, :v1_search, :catalog] + before_action :registry_authorize, except: [:token, :v1_search, :catalog, :static_index] before_action :authorize_repository_read, only: [:pull_manifest, :tags_list, :check_blob, :pull_blob] before_action :container_push_prop_validation, only: [:start_upload_blob, :upload_blob, :finish_upload_blob, :push_manifest] before_action :create_container_repo_if_needed, only: [:start_upload_blob, :upload_blob, :finish_upload_blob, :push_manifest] @@ -806,5 +807,25 @@ def render_podman_error(code, message, status = :bad_request) def item_not_found(item) render_podman_error("NAME_UNKNOWN", _("%s was not found!") % item, :not_found) end + + def static_index + host_ip = request.remote_ip + host = ::Host.joins(:primary_interface).where(nics: { ip: host_ip }).first + flatpak_index = (redirect_client { Resources::Registry::Proxy.get(@_request.fullpath, headers) }) + flatpak_index_json = JSON.parse(flatpak_index) + # Filter out repositories if it's a registered host + if host && host.content_view_environments.any? + # host.update(flatpak_index: flatpak_index) Will this help?? + repos = host.content_view_environments.flat_map do |cve| + cve.content_view_version.repositories + end + available_container_repo_names = repos.map(&:container_repository_name) + flatpak_index_json['Results'] = flatpak_index_json['Results'].select do |result| + available_container_repo_names.include?(result['Name']) + end + end + # Otherwise just return unfiltered pulp flatpak index + render json: flatpak_index_json + end + end end -end diff --git a/config/routes/api/registry.rb b/config/routes/api/registry.rb index e4a365ed80a..d5ff6ec475d 100644 --- a/config/routes/api/registry.rb +++ b/config/routes/api/registry.rb @@ -19,6 +19,7 @@ class ActionDispatch::Routing::Mapper match '/v2' => 'registry_proxies#ping', :via => :get match '/v1/_ping' => 'registry_proxies#v1_ping', :via => :get match '/v1/search' => 'registry_proxies#v1_search', :via => :get + match '/index/static' => 'registry_proxies#static_index', :via => :get end end end