42 lines
1.2 KiB
Go
42 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"strings"
|
|
)
|
|
|
|
// compactKept writes the vault's export compact. The composition (the SDK's keptFile) writes it indented, and its 334
|
|
// sealed secrets were 164,763 bytes of it against 138,474 compact: a fifth of the declaration's room, in whitespace,
|
|
// base64-encoded again on the wire. Every reader parses JSON, so the spacing is nobody's. A resource that is not
|
|
// the export, or whose content is not JSON, is left as it is. The resources are copied, never changed in place.
|
|
func compactKept(resources []map[string]any) []map[string]any {
|
|
out := make([]map[string]any, len(resources))
|
|
for i, r := range resources {
|
|
out[i] = r
|
|
id, _ := r["id"].(string)
|
|
path, _ := r["path"].(string)
|
|
content, ok := r["content"].(string)
|
|
if !ok || (id != "kept" && !strings.HasSuffix(id, ".kept")) || !strings.HasSuffix(path, "/export.json") {
|
|
continue
|
|
}
|
|
var dst bytes.Buffer
|
|
if json.Compact(&dst, []byte(content)) != nil {
|
|
continue
|
|
}
|
|
if strings.HasSuffix(content, "\n") {
|
|
dst.WriteByte('\n')
|
|
}
|
|
if dst.String() == content {
|
|
continue
|
|
}
|
|
c := make(map[string]any, len(r))
|
|
for k, v := range r {
|
|
c[k] = v
|
|
}
|
|
c["content"] = dst.String()
|
|
out[i] = c
|
|
}
|
|
return out
|
|
}
|