Make query sanitization more extensible #3167
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
We (Salsify) are implementing logging of GraphQL queries and variables but our approach is slightly different than the default behavior of
GraphQL::Language::SanitizedPrinter
:GraphQL::Schema::Argument
subclass to support aredact
option rather than just redacting all stringsWe were able to implement this by subclassing
GraphQL::Language::SanitizedPrinter
but it involved some unfortunate copying of code fromGraphQL::Language::Printer
to restore overridden behavior and copying of code fromGraphQL::Language::SanitizedPrinter
where we need to inject logic in the middle of a method. Alternatively we could directly subclassGraphQL::Language::Printer
but then we would have lost the type bookkeeping fromGraphQL::Language::SanitizedPrinter
.This PR proposes a few changes to
GraphQL::Language::SanitizedPrinter
to make it easier to customize the behavior:redact_argument_value?
andredacted_argument_value
hooks that subclasses can use to more easily customize the redaction behavior