diff options
Diffstat (limited to 'app/serializers/service_field_entity.rb')
-rw-r--r-- | app/serializers/service_field_entity.rb | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/app/serializers/service_field_entity.rb b/app/serializers/service_field_entity.rb index 08e08ae187f..960e216906e 100644 --- a/app/serializers/service_field_entity.rb +++ b/app/serializers/service_field_entity.rb @@ -2,14 +2,22 @@ class ServiceFieldEntity < Grape::Entity include RequestAwareEntity + include Gitlab::Utils::StrongMemoize - expose :type, :name, :title, :placeholder, :required, :choices, :help + expose :type, :name, :placeholder, :required, :choices + + expose :title do |field| + non_empty_password?(field) ? field[:non_empty_password_title] : field[:title] + end + + expose :help do |field| + non_empty_password?(field) ? field[:non_empty_password_help] : field[:help] + end expose :value do |field| - # field[:name] is not user input and so can assume is safe - value = service.public_send(field[:name]) # rubocop:disable GitlabSecurity/PublicSend + value = value_for(field) - if field[:type] == 'password' && value.present? + if non_empty_password?(field) 'true' elsif field[:type] == 'checkbox' ActiveRecord::Type::Boolean.new.deserialize(value).to_s @@ -23,4 +31,17 @@ class ServiceFieldEntity < Grape::Entity def service request.service end + + def value_for(field) + strong_memoize(:value_for) do + # field[:name] is not user input and so can assume is safe + service.public_send(field[:name]) # rubocop:disable GitlabSecurity/PublicSend + end + end + + def non_empty_password?(field) + strong_memoize(:non_empty_password) do + field[:type] == 'password' && value_for(field).present? + end + end end |