1
0
mirror of https://github.com/getsops/sops.git synced 2026-02-05 12:45:21 +01:00

Move non-string and newline function calls outside of encode/decode

Signed-off-by: Lance Rushing <lance@lancerushing.com>
This commit is contained in:
Lance Rushing
2023-12-14 12:20:54 -08:00
committed by Felix Fontein
parent 32dbc6be13
commit b67a83d408
4 changed files with 23 additions and 17 deletions

View File

@@ -48,6 +48,8 @@ func (store *Store) LoadEncryptedFile(in []byte) (sops.Tree, error) {
}
}
stores.DecodeNewLines(mdMap)
stores.DecodeNonStrings(mdMap)
metadata, err := stores.UnflattenMetadata(mdMap)
if err != nil {
return sops.Tree{}, err
@@ -104,6 +106,10 @@ func (store *Store) EmitEncryptedFile(in sops.Tree) ([]byte, error) {
if err != nil {
return nil, err
}
stores.EncodeNonStrings(mdItems)
stores.EncodeNewLines(mdItems)
var keys []string
for k := range mdItems {
keys = append(keys, k)

View File

@@ -73,8 +73,6 @@ func FlattenMetadata(md Metadata) (map[string]interface{}, error) {
}
flat := Flatten(mdMap)
encodeNonStrings(flat)
encodeNewLines(flat)
return flat, nil
}
@@ -206,8 +204,6 @@ func Unflatten(in map[string]interface{}) map[string]interface{} {
// UnflattenMetadata unflattens a map flattened by FlattenMetadata into Metadata
func UnflattenMetadata(in map[string]interface{}) (Metadata, error) {
decodeNewLines(in)
decodeNonStrings(in)
m := Unflatten(in)
var md Metadata
jsonBytes, err := json.Marshal(m)
@@ -218,7 +214,7 @@ func UnflattenMetadata(in map[string]interface{}) (Metadata, error) {
return md, err
}
func decodeNewLines(m map[string]interface{}) {
func DecodeNewLines(m map[string]interface{}) {
for k, v := range m {
if s, ok := v.(string); ok {
m[k] = strings.Replace(s, "\\n", "\n", -1)
@@ -226,7 +222,7 @@ func decodeNewLines(m map[string]interface{}) {
}
}
func encodeNewLines(m map[string]interface{}) {
func EncodeNewLines(m map[string]interface{}) {
for k, v := range m {
if s, ok := v.(string); ok {
m[k] = strings.Replace(s, "\n", "\\n", -1)
@@ -234,8 +230,8 @@ func encodeNewLines(m map[string]interface{}) {
}
}
// decodeNonStrings will look for known keys that are not strings and decode to the appropriate type
func decodeNonStrings(m map[string]interface{}) {
// DecodeNonStrings will look for known keys that are not strings and decode to the appropriate type
func DecodeNonStrings(m map[string]interface{}) {
if v, ok := m["mac_only_encrypted"]; ok {
m["mac_only_encrypted"] = false
if v == "true" {
@@ -244,8 +240,8 @@ func decodeNonStrings(m map[string]interface{}) {
}
}
// encodeNonStrings will look for known keys that are not strings and will encode it to strings
func encodeNonStrings(m map[string]interface{}) {
// EncodeNonStrings will look for known keys that are not strings and will encode it to strings
func EncodeNonStrings(m map[string]interface{}) {
if v, found := m["mac_only_encrypted"]; found {
if vBool, ok := v.(bool); ok {
m["mac_only_encrypted"] = "false"

View File

@@ -146,9 +146,9 @@ func TestFlattenMetadata(t *testing.T) {
want map[string]interface{}
}{
{Metadata{MACOnlyEncrypted: false}, map[string]interface{}{"mac_only_encrypted": nil}},
{Metadata{MACOnlyEncrypted: true}, map[string]interface{}{"mac_only_encrypted": "true"}},
{Metadata{MessageAuthenticationCode: "line1\nline2"}, map[string]interface{}{"mac": "line1\\nline2"}},
{Metadata{MessageAuthenticationCode: "line1\n\n\nline2\n\nline3"}, map[string]interface{}{"mac": "line1\\n\\n\\nline2\\n\\nline3"}},
{Metadata{MACOnlyEncrypted: true}, map[string]interface{}{"mac_only_encrypted": true}},
{Metadata{MessageAuthenticationCode: "line1\nline2"}, map[string]interface{}{"mac": "line1\nline2"}},
{Metadata{MessageAuthenticationCode: "line1\n\n\nline2\n\nline3"}, map[string]interface{}{"mac": "line1\n\n\nline2\n\nline3"}},
}
for _, tt := range tests {
@@ -190,7 +190,7 @@ func TestDecodeNewLines(t *testing.T) {
}
for _, tt := range tests {
decodeNewLines(tt.input)
DecodeNewLines(tt.input)
for k, v := range tt.want {
assert.Equal(t, v, tt.input[k])
}
@@ -207,7 +207,7 @@ func TestEncodeNewLines(t *testing.T) {
}
for _, tt := range tests {
encodeNewLines(tt.input)
EncodeNewLines(tt.input)
for k, v := range tt.want {
assert.Equal(t, v, tt.input[k])
}
@@ -225,7 +225,7 @@ func TestDecodeNonStrings(t *testing.T) {
}
for _, tt := range tests {
decodeNonStrings(tt.input)
DecodeNonStrings(tt.input)
assert.Equal(t, tt.want, tt.input)
}
}
@@ -240,7 +240,7 @@ func TestEncodeNonStrings(t *testing.T) {
}
for _, tt := range tests {
encodeNonStrings(tt.input)
EncodeNonStrings(tt.input)
assert.Equal(t, tt.want, tt.input)
}
}

View File

@@ -187,6 +187,8 @@ func (store *Store) iniSectionToMetadata(sopsSection *ini.Section) (stores.Metad
for k, v := range sopsSection.KeysHash() {
metadataHash[k] = v
}
stores.DecodeNewLines(metadataHash)
stores.DecodeNonStrings(metadataHash)
return stores.UnflattenMetadata(metadataHash)
}
@@ -225,6 +227,8 @@ func (store *Store) encodeMetadataToIniBranch(md stores.Metadata) (sops.TreeBran
if err != nil {
return nil, err
}
stores.EncodeNonStrings(flat)
stores.EncodeNewLines(flat)
branch := sops.TreeBranch{}
for key, value := range flat {