Module: API::Helpers::Packages::DependencyProxyHelpers
- Defined in:
- lib/api/helpers/packages/dependency_proxy_helpers.rb
Constant Summary collapse
- REGISTRY_BASE_URLS =
{ npm: 'https://registry.npmjs.org/', pypi: 'https://pypi.org/simple/', maven: 'https://repo.maven.apache.org/maven2/' }.freeze
- APPLICATION_SETTING_NAMES =
{ npm: 'npm_package_requests_forwarding', pypi: 'pypi_package_requests_forwarding', maven: 'maven_package_requests_forwarding' }.freeze
Instance Method Summary collapse
- #redirect_registry_request(forward_to_registry: false, package_type: nil, target: nil, **options) ⇒ Object
- #redirect_registry_request_available?(package_type, target) ⇒ Boolean
- #registry_url(package_type, options) ⇒ Object
Instance Method Details
#redirect_registry_request(forward_to_registry: false, package_type: nil, target: nil, **options) ⇒ Object
19 20 21 22 23 24 25 26 27 28 |
# File 'lib/api/helpers/packages/dependency_proxy_helpers.rb', line 19 def redirect_registry_request(forward_to_registry: false, package_type: nil, target: nil, **) if forward_to_registry && redirect_registry_request_available?(package_type, target) && maven_forwarding_ff_enabled?(package_type, target) ::Gitlab::Tracking.event(self.[:for].name, "#{package_type}_request_forward") redirect(registry_url(package_type, ), body: [:body]) # For the requests with POST methods we need to set status 307 in order to keep request's method status :temporary_redirect if [:method] == 'POST' else yield end end |
#redirect_registry_request_available?(package_type, target) ⇒ Boolean
45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/api/helpers/packages/dependency_proxy_helpers.rb', line 45 def redirect_registry_request_available?(package_type, target) application_setting_name = APPLICATION_SETTING_NAMES[package_type] raise ArgumentError, "Can't find application setting for package_type #{package_type}" unless application_setting_name if target.present? target.public_send(application_setting_name) # rubocop:disable GitlabSecurity/PublicSend else ::Gitlab::CurrentSettings .current_application_settings .attributes .fetch(application_setting_name, false) end end |
#registry_url(package_type, options) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/api/helpers/packages/dependency_proxy_helpers.rb', line 30 def registry_url(package_type, ) base_url = registry_base_url(package_type) raise ArgumentError, "Can't build registry_url for package_type #{package_type}" unless base_url case package_type when :npm "#{base_url}#{[[:path], [:package_name]].compact.join('/')}" when :pypi "#{base_url}#{[:package_name]}/" when :maven "#{base_url}#{[:path]}/#{[:file_name]}" end end |