Add internal engine relocation candidate
This commit is contained in:
46
internal/engine/render.go
Normal file
46
internal/engine/render.go
Normal file
@@ -0,0 +1,46 @@
|
||||
package engine
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"io"
|
||||
"strings"
|
||||
|
||||
"gitea.maximumdirect.net/eric/ConfigKit/internal/document"
|
||||
yamladapter "gitea.maximumdirect.net/eric/ConfigKit/internal/yaml"
|
||||
)
|
||||
|
||||
var errEffectiveUnavailable = errors.New("configkit: effective configuration is unavailable")
|
||||
|
||||
// WriteEffective writes deterministic redacted YAML from the frozen resolved
|
||||
// snapshot. The output is intended for inspection and is not promised reloadable.
|
||||
// Writer errors, including short writes, are returned and may leave partial output.
|
||||
func (r *Result[T]) WriteEffective(output io.Writer) error {
|
||||
if r == nil || r.final == nil || output == nil {
|
||||
return errEffectiveUnavailable
|
||||
}
|
||||
safe := redactedDocument(r.final, r.secrets, Path{})
|
||||
return yamladapter.Write(output, safe)
|
||||
}
|
||||
|
||||
func redactedDocument(node *document.Node, secret map[string]bool, path Path) *document.Node {
|
||||
result, _ := safeSnapshotDocument(node, secret, path)
|
||||
return result
|
||||
}
|
||||
|
||||
func pathIsSecret(secret map[string]bool, path Path) bool {
|
||||
if secret[""] {
|
||||
return true
|
||||
}
|
||||
pointer := path.String()
|
||||
for pointer != "" {
|
||||
if secret[pointer] {
|
||||
return true
|
||||
}
|
||||
position := strings.LastIndexByte(pointer, '/')
|
||||
if position <= 0 {
|
||||
break
|
||||
}
|
||||
pointer = pointer[:position]
|
||||
}
|
||||
return false
|
||||
}
|
||||
Reference in New Issue
Block a user