Commit 32208b60 authored by Doug Stull's avatar Doug Stull

Merge branch '353721-password-type-fields-api' into 'master'

Filter integration fields by type

See merge request gitlab-org/gitlab!81564
parents 20fb62c2 8b6eca68
...@@ -414,7 +414,10 @@ class Integration < ApplicationRecord ...@@ -414,7 +414,10 @@ class Integration < ApplicationRecord
end end
def api_field_names def api_field_names
fields.pluck(:name).grep_v(/password|token|key|title|description/) fields
.reject { _1[:type] == 'password' }
.pluck(:name)
.grep_v(/password|token|key/)
end end
def global_fields def global_fields
......
...@@ -5,19 +5,8 @@ module API ...@@ -5,19 +5,8 @@ module API
class ProjectIntegration < Entities::ProjectIntegrationBasic class ProjectIntegration < Entities::ProjectIntegrationBasic
# Expose serialized properties # Expose serialized properties
expose :properties do |integration, options| expose :properties do |integration, options|
# TODO: Simplify as part of https://gitlab.com/gitlab-org/gitlab/issues/29404 integration.api_field_names.to_h do |name|
[name, integration.public_send(name)] # rubocop:disable GitlabSecurity/PublicSend
attributes =
if integration.data_fields_present?
integration.data_fields.as_json.keys
else
integration.properties.keys
end
attributes &= integration.api_field_names
attributes.each_with_object({}) do |attribute, hash|
hash[attribute] = integration.public_send(attribute) # rubocop:disable GitlabSecurity/PublicSend
end end
end end
end end
......
...@@ -732,14 +732,21 @@ RSpec.describe Integration do ...@@ -732,14 +732,21 @@ RSpec.describe Integration do
{ name: 'password' }, { name: 'password' },
{ name: 'password_field' }, { name: 'password_field' },
{ name: 'some_safe_field' }, { name: 'some_safe_field' },
{ name: 'safe_field' } { name: 'safe_field' },
{ name: 'url' },
{ name: 'trojan_horse', type: 'password' },
{ name: 'trojan_gift', type: 'gift' }
].shuffle ].shuffle
end end
end end
end end
it 'filters out sensitive fields' do it 'filters out sensitive fields' do
expect(fake_integration.new).to have_attributes(api_field_names: match_array(%w[some_safe_field safe_field])) safe_fields = %w[some_safe_field safe_field url trojan_gift]
expect(fake_integration.new).to have_attributes(
api_field_names: match_array(safe_fields)
)
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment