Mask sensitive structural replacements
This commit is contained in:
@@ -7,13 +7,27 @@ import (
|
||||
)
|
||||
|
||||
type pairedDiffSnapshot struct {
|
||||
left *document.Node
|
||||
right *document.Node
|
||||
leftRedacted bool
|
||||
rightRedacted bool
|
||||
left *document.Node
|
||||
right *document.Node
|
||||
leftRedacted bool
|
||||
rightRedacted bool
|
||||
requiresFallback bool
|
||||
}
|
||||
|
||||
func preparePairedDiffSnapshot(left, right *document.Node, path Path, sensitivity *diffSensitivity) (pairedDiffSnapshot, bool) {
|
||||
paired, supported := preparePairedDiffNodes(left, right, path, sensitivity)
|
||||
if !supported || !paired.requiresFallback {
|
||||
return paired, supported
|
||||
}
|
||||
return pairedDiffSnapshot{
|
||||
left: redactedDiffNode(left),
|
||||
right: redactedDiffNode(right),
|
||||
leftRedacted: left != nil,
|
||||
rightRedacted: right != nil,
|
||||
}, true
|
||||
}
|
||||
|
||||
func preparePairedDiffNodes(left, right *document.Node, path Path, sensitivity *diffSensitivity) (pairedDiffSnapshot, bool) {
|
||||
if left == nil && right == nil {
|
||||
return pairedDiffSnapshot{}, true
|
||||
}
|
||||
@@ -26,7 +40,10 @@ func preparePairedDiffSnapshot(left, right *document.Node, path Path, sensitivit
|
||||
}, true
|
||||
}
|
||||
if left != nil && right != nil && left.Kind != right.Kind {
|
||||
return pairedDiffSnapshot{}, false
|
||||
if sensitivity.hasStrictDescendant(path.String()) {
|
||||
return pairedDiffSnapshot{requiresFallback: true}, true
|
||||
}
|
||||
return pairedDiffSnapshot{left: left, right: right}, true
|
||||
}
|
||||
|
||||
kind := document.Null
|
||||
@@ -42,7 +59,7 @@ func preparePairedDiffSnapshot(left, right *document.Node, path Path, sensitivit
|
||||
return preparePairedDiffSequence(left, right, path, sensitivity)
|
||||
default:
|
||||
if sensitivity.hasStrictDescendant(path.String()) {
|
||||
return pairedDiffSnapshot{}, false
|
||||
return pairedDiffSnapshot{requiresFallback: true}, true
|
||||
}
|
||||
return pairedDiffSnapshot{left: left, right: right}, true
|
||||
}
|
||||
@@ -87,10 +104,13 @@ func preparePairedDiffMapping(left, right *document.Node, path Path, sensitivity
|
||||
if rightPresent {
|
||||
rightChild = rightEntry.Value
|
||||
}
|
||||
child, supported := preparePairedDiffSnapshot(leftChild, rightChild, path.Key(key), sensitivity)
|
||||
child, supported := preparePairedDiffNodes(leftChild, rightChild, path.Key(key), sensitivity)
|
||||
if !supported {
|
||||
return pairedDiffSnapshot{}, false
|
||||
}
|
||||
if child.requiresFallback {
|
||||
return pairedDiffSnapshot{requiresFallback: true}, true
|
||||
}
|
||||
if leftPresent {
|
||||
leftEntry.Value = child.left
|
||||
leftCopy.Mapping = append(leftCopy.Mapping, leftEntry)
|
||||
@@ -135,10 +155,13 @@ func preparePairedDiffSequence(left, right *document.Node, path Path, sensitivit
|
||||
if right != nil && index < len(right.Sequence) {
|
||||
rightChild = right.Sequence[index]
|
||||
}
|
||||
child, supported := preparePairedDiffSnapshot(leftChild, rightChild, path.Index(index), sensitivity)
|
||||
child, supported := preparePairedDiffNodes(leftChild, rightChild, path.Index(index), sensitivity)
|
||||
if !supported {
|
||||
return pairedDiffSnapshot{}, false
|
||||
}
|
||||
if child.requiresFallback {
|
||||
return pairedDiffSnapshot{requiresFallback: true}, true
|
||||
}
|
||||
if left != nil && index < len(left.Sequence) {
|
||||
leftCopy.Sequence[index] = child.left
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user