Skip to content

Commit 1fd595c

Browse files
committed
Use filter_param instead to handle all Hashes
1 parent 610f627 commit 1fd595c

1 file changed

Lines changed: 13 additions & 79 deletions

File tree

lib/graphql/tracing/perfetto_trace.rb

Lines changed: 13 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,7 @@ def initialize(active_support_notifications_pattern: nil, save_profile: false, *
101101
else
102102
[]
103103
end
104-
as_param_filter = ActiveSupport::ParameterFilter.new(fp, mask: ArgumentsFilter::FILTERED)
105-
ActiveSupportArgumentsFilter.new(as_param_filter)
104+
ActiveSupport::ParameterFilter.new(fp, mask: ArgumentsFilter::FILTERED)
106105
else
107106
ArgumentsFilter.new
108107
end
@@ -270,9 +269,9 @@ def end_execute_field(field, object, arguments, query, app_result)
270269
if @create_debug_annotations
271270
start_field.track_event = dup_with(start_field.track_event,{
272271
debug_annotations: [
273-
payload_to_debug(nil, filter_if_hash(object.object), iid: DA_OBJECT_IID, intern_value: true),
274-
payload_to_debug(nil, filter_if_hash(arguments), iid: DA_ARGUMENTS_IID),
275-
payload_to_debug(nil, filter_if_hash(app_result), iid: DA_RESULT_IID, intern_value: true)
272+
payload_to_debug(nil, object.object, iid: DA_OBJECT_IID, intern_value: true),
273+
payload_to_debug(nil, arguments, iid: DA_ARGUMENTS_IID),
274+
payload_to_debug(nil, app_result, iid: DA_RESULT_IID, intern_value: true)
276275
]
277276
})
278277
end
@@ -606,86 +605,18 @@ def fid
606605
Fiber.current.object_id
607606
end
608607

609-
def filter_if_hash(args)
610-
if args.is_a?(Hash)
611-
@arguments_filter.filter(args)
612-
else
613-
args
614-
end
615-
end
616-
617-
class ActiveSupportArgumentsFilter
618-
def initialize(parameter_filter)
619-
@parameter_filter = parameter_filter
620-
end
621-
622-
def filter(args)
623-
args_h = remove_wrappers(args)
624-
@parameter_filter.filter(args_h)
625-
end
626-
627-
private
628-
629-
def remove_wrappers(args)
630-
case args
631-
when Array
632-
args.map { |a| remove_wrappers(a)}
633-
when Hash
634-
args2 = args.dup
635-
args.each do |k, v|
636-
args2[k] = remove_wrappers(v)
637-
end
638-
args2
639-
when GraphQL::Schema::InputObject
640-
args_h = args.to_h
641-
args_h.each do |k, v|
642-
args_h[k] = remove_wrappers(v)
643-
end
644-
args_h
645-
else
646-
args
647-
end
648-
end
649-
end
650-
651608
class ArgumentsFilter
652609
# From Rails defaults
653610
# https://github.com/rails/rails/blob/main/railties/lib/rails/generators/rails/app/templates/config/initializers/filter_parameter_logging.rb.tt#L6-L8
654611
SENSITIVE_KEY = /passw|token|crypt|email|_key|salt|certificate|secret|ssn|cvv|cvc|otp/i
655612
FILTERED = "[FILTERED]"
656613

657-
def filter(argument)
658-
case argument
659-
when GraphQL::Schema::InputObject
660-
filter(argument.to_h)
661-
when Hash
662-
target_h = nil
663-
argument.each do |k, v|
664-
if (k.is_a?(String) && SENSITIVE_KEY.match?(k)) ||
665-
(k.is_a?(Symbol) && SENSITIVE_KEY.match?(k.name))
666-
target_h ||= argument.dup
667-
target_h[k] = FILTERED
668-
else
669-
new_v = filter(v)
670-
if !v.equal?(new_v)
671-
target_h ||= argument.dup
672-
target_h[k] = new_v
673-
end
674-
end
675-
end
676-
target_h || argument
677-
when Array
678-
target_arr = nil
679-
argument.each_with_index do |inner_v, i|
680-
new_v = filter(inner_v)
681-
if !inner_v.equal?(new_v)
682-
target_arr ||= argument.dup
683-
target_arr[i] = new_v
684-
end
685-
end
686-
target_arr || argument
614+
def filter_param(key, value)
615+
if (key.is_a?(String) && SENSITIVE_KEY.match?(key)) ||
616+
(key.is_a?(Symbol) && SENSITIVE_KEY.match?(key.name))
617+
FILTERED
687618
else
688-
argument
619+
value
689620
end
690621
end
691622
end
@@ -743,10 +674,13 @@ def payload_to_debug(k, v, iid: nil, intern_value: false)
743674
else
744675
String(k2)
745676
end
746-
payload_to_debug(debug_k, v2, intern_value: intern_value)
677+
filtered_v2 = @arguments_filter.filter_param(debug_k, v2)
678+
payload_to_debug(debug_k, filtered_v2, intern_value: intern_value)
747679
}
748680
debug_v.compact!
749681
debug_annotation(iid, :dict_entries, debug_v)
682+
when GraphQL::Schema::InputObject
683+
payload_to_debug(k, v.to_h, iid: iid, intern_value: intern_value)
750684
else
751685
class_name_iid = @interned_da_string_values[v.class.name]
752686
da = [

0 commit comments

Comments
 (0)