67 lines
1.9 KiB
Go
67 lines
1.9 KiB
Go
package configuration
|
|
|
|
import (
|
|
"io"
|
|
"strings"
|
|
|
|
"gitea.maximumdirect.net/eric/ConfigKit"
|
|
)
|
|
|
|
// Inspection is the read-only subset of the retained ConfigKit result used by
|
|
// the facade. It does not expose typed configuration or resource contexts.
|
|
type Inspection interface {
|
|
Metadata() configkit.Metadata
|
|
Sources() []configkit.SourceInfo
|
|
Diagnostics() []configkit.Diagnostic
|
|
Explain(configkit.Path) (configkit.Explanation, bool)
|
|
WriteEffective(io.Writer) error
|
|
WriteExplanation(io.Writer, configkit.Path) error
|
|
capturedResult() *configkit.Result[document]
|
|
}
|
|
|
|
type inspectionResult struct {
|
|
*configkit.Result[document]
|
|
}
|
|
|
|
func (inspection inspectionResult) capturedResult() *configkit.Result[document] {
|
|
return inspection.Result
|
|
}
|
|
|
|
// Inspection returns only the retained result's inspection operations.
|
|
func (state *loaded) Inspection() Inspection {
|
|
if state == nil {
|
|
return nil
|
|
}
|
|
return inspectionResult{Result: state.result}
|
|
}
|
|
|
|
// Diff compares two captured ConfigKit results without reconstructing them.
|
|
func Diff(left, right Inspection) ([]configkit.Difference, error) {
|
|
var leftResult, rightResult *configkit.Result[document]
|
|
if left != nil {
|
|
leftResult = left.capturedResult()
|
|
}
|
|
if right != nil {
|
|
rightResult = right.capturedResult()
|
|
}
|
|
return configkit.Diff(leftResult, rightResult)
|
|
}
|
|
|
|
func secretProviderPath(path configkit.Path) bool {
|
|
pointer := path.String()
|
|
if pointer == "" {
|
|
return false
|
|
}
|
|
parts := strings.Split(strings.TrimPrefix(pointer, "/"), "/")
|
|
if len(parts) < 4 || (parts[0] != "backends" && parts[0] != "profiles") || parts[2] != "extra_params" {
|
|
return false
|
|
}
|
|
key := strings.ToLower(strings.ReplaceAll(strings.ReplaceAll(parts[len(parts)-1], "~1", "/"), "~0", "~"))
|
|
switch key {
|
|
case "api_key", "apikey", "authorization", "credential", "credentials", "password", "secret", "token", "access_token":
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|