From c2eb49835294c2ad119dcbbfabfea034595e9b84 Mon Sep 17 00:00:00 2001 From: Matthew Keeler Date: Wed, 10 Jan 2024 11:05:57 -0500 Subject: [PATCH] Add filter_redact_anonymous --- lib/ldclient-rb/events.rb | 8 ++++---- lib/ldclient-rb/impl/context_filter.rb | 21 +++++++++++++++++++-- spec/events_spec.rb | 8 ++++---- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/lib/ldclient-rb/events.rb b/lib/ldclient-rb/events.rb index d1dd0242..4800163b 100644 --- a/lib/ldclient-rb/events.rb +++ b/lib/ldclient-rb/events.rb @@ -486,7 +486,7 @@ def make_output_events(events, summary) out[:variation] = event.variation unless event.variation.nil? out[:version] = event.version unless event.version.nil? out[:prereqOf] = event.prereq_of unless event.prereq_of.nil? - out[:context] = @context_filter.filter(event.context, true) + out[:context] = @context_filter.filter_redact_anonymous(event.context) out[:reason] = event.reason unless event.reason.nil? out @@ -554,7 +554,7 @@ def make_output_events(events, summary) kind: IDENTIFY_KIND, creationDate: event.timestamp, key: event.context.fully_qualified_key, - context: @context_filter.filter(event.context, false), + context: @context_filter.filter(event.context), } when LaunchDarkly::Impl::CustomEvent @@ -572,7 +572,7 @@ def make_output_events(events, summary) { kind: INDEX_KIND, creationDate: event.timestamp, - context: @context_filter.filter(event.context, false), + context: @context_filter.filter(event.context), } when LaunchDarkly::Impl::DebugEvent @@ -581,7 +581,7 @@ def make_output_events(events, summary) kind: DEBUG_KIND, creationDate: original.timestamp, key: original.key, - context: @context_filter.filter(original.context, false), + context: @context_filter.filter(original.context), value: original.value, } out[:default] = original.default unless original.default.nil? diff --git a/lib/ldclient-rb/impl/context_filter.rb b/lib/ldclient-rb/impl/context_filter.rb index 467bd671..bec00400 100644 --- a/lib/ldclient-rb/impl/context_filter.rb +++ b/lib/ldclient-rb/impl/context_filter.rb @@ -20,10 +20,27 @@ def initialize(all_attributes_private, private_attributes) # redaction applied. # # @param context [LaunchDarkly::LDContext] - # @param redact_anonymous [Boolean] # @return [Hash] # - def filter(context, redact_anonymous) + def filter(context) + internal_filter(context, false) + end + + # + # Return a hash representation of the provided context with attribute + # redaction applied. + # + # If a context is anonyomous, all attributes will be redacted except + # for key, kind, and anonymous. + # + # @param context [LaunchDarkly::LDContext] + # @return [Hash] + # + def filter_redact_anonymous(context) + internal_filter(context, true) + end + + private def internal_filter(context, redact_anonymous) return filter_single_context(context, true, redact_anonymous) unless context.multi_kind? filtered = {kind: 'multi'} diff --git a/spec/events_spec.rb b/spec/events_spec.rb index 007c9c19..f10100fd 100644 --- a/spec/events_spec.rb +++ b/spec/events_spec.rb @@ -601,7 +601,7 @@ def index_event(config, context, timestamp = starting_timestamp) out = { kind: "index", creationDate: timestamp, - context: context_filter.filter(context, false), + context: context_filter.filter(context), } JSON.parse(out.to_json, symbolize_names: true) end @@ -618,7 +618,7 @@ def identify_event(config, context, timestamp = starting_timestamp) kind: "identify", creationDate: timestamp, key: context.fully_qualified_key, - context: context_filter.filter(context, false), + context: context_filter.filter(context), } JSON.parse(out.to_json, symbolize_names: true) end @@ -634,7 +634,7 @@ def identify_event(config, context, timestamp = starting_timestamp) # def feature_event(config, flag, context, variation, value, timestamp = starting_timestamp) context_filter = Impl::ContextFilter.new(config.all_attributes_private, config.private_attributes) - redacted_context = context_filter.filter(context, true) + redacted_context = context_filter.filter_redact_anonymous(context) out = { kind: 'feature', @@ -693,7 +693,7 @@ def debug_event(config, flag, context, variation, value, timestamp = starting_ti variation: variation, version: flag[:version], value: value, - context: context_filter.filter(context, false), + context: context_filter.filter(context), } JSON.parse(out.to_json, symbolize_names: true) end