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:
committed by
Felix Fontein
parent
32dbc6be13
commit
b67a83d408
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user