@@ -3,17 +3,13 @@ package dotenv //import "github.com/getsops/sops/v3/stores/dotenv"
33import (
44 "bytes"
55 "fmt"
6- "sort"
76 "strings"
87
98 "github.com/getsops/sops/v3"
109 "github.com/getsops/sops/v3/config"
1110 "github.com/getsops/sops/v3/stores"
1211)
1312
14- // SopsPrefix is the prefix for all metadatada entry keys
15- const SopsPrefix = stores .SopsMetadataKey + "_"
16-
1713// Store handles storage of dotenv data
1814type Store struct {
1915 config config.DotenvStoreConfig
@@ -33,47 +29,15 @@ func (store *Store) LoadEncryptedFile(in []byte) (sops.Tree, error) {
3329 if err != nil {
3430 return sops.Tree {}, err
3531 }
36-
37- var resultBranch sops.TreeBranch
38- mdMap := make (map [string ]interface {})
39- for _ , item := range branches [0 ] {
40- switch key := item .Key .(type ) {
41- case string :
42- if strings .HasPrefix (key , SopsPrefix ) {
43- key = key [len (SopsPrefix ):]
44- mdMap [key ] = item .Value
45- } else {
46- resultBranch = append (resultBranch , item )
47- }
48- case sops.Comment :
49- resultBranch = append (resultBranch , item )
50- default :
51- panic (fmt .Sprintf ("Unexpected type: %T (value %#v)" , key , key ))
52- }
53- }
54- if len (mdMap ) == 0 {
55- return sops.Tree {}, sops .MetadataNotFound
56- }
57-
58- stores .DecodeNewLines (mdMap )
59- err = stores .DecodeNonStrings (mdMap )
60- if err != nil {
61- return sops.Tree {}, err
62- }
63- metadata , err := stores .UnflattenMetadata (mdMap )
32+ branches , metadata , err := stores .ExtractMetadata (branches , stores.MetadataOpts {
33+ Flatten : stores .MetadataFlattenFull ,
34+ })
6435 if err != nil {
6536 return sops.Tree {}, err
6637 }
67- internalMetadata , err := metadata .ToInternal ()
68- if err != nil {
69- return sops.Tree {}, err
70- }
71-
7238 return sops.Tree {
73- Branches : sops.TreeBranches {
74- resultBranch ,
75- },
76- Metadata : internalMetadata ,
39+ Branches : branches ,
40+ Metadata : metadata ,
7741 }, nil
7842}
7943
@@ -111,29 +75,13 @@ func (store *Store) LoadPlainFile(in []byte) (sops.TreeBranches, error) {
11175// EmitEncryptedFile returns the encrypted file's bytes corresponding to a sops
11276// runtime object
11377func (store * Store ) EmitEncryptedFile (in sops.Tree ) ([]byte , error ) {
114- metadata := stores .MetadataFromInternal (in .Metadata )
115- mdItems , err := stores .FlattenMetadata (metadata )
78+ branches , err := stores .SerializeMetadata (in , stores.MetadataOpts {
79+ Flatten : stores .MetadataFlattenFull ,
80+ })
11681 if err != nil {
117- return nil , err
118- }
119-
120- stores .EncodeNonStrings (mdItems )
121- stores .EncodeNewLines (mdItems )
122-
123- var keys []string
124- for k := range mdItems {
125- keys = append (keys , k )
126- }
127- sort .Strings (keys )
128-
129- for _ , key := range keys {
130- var value = mdItems [key ]
131- if value == nil {
132- continue
133- }
134- in .Branches [0 ] = append (in .Branches [0 ], sops.TreeItem {Key : SopsPrefix + key , Value : value })
82+ return nil , fmt .Errorf ("Error marshaling metadata: %s" , err )
13583 }
136- return store .EmitPlainFile (in . Branches )
84+ return store .EmitPlainFile (branches )
13785}
13886
13987// EmitPlainFile returns the plaintext file's bytes corresponding to a sops
@@ -188,7 +136,7 @@ func IsComplexValue(v interface{}) bool {
188136func (store * Store ) HasSopsTopLevelKey (branch sops.TreeBranch ) bool {
189137 for _ , b := range branch {
190138 if key , ok := b .Key .(string ); ok {
191- if strings .HasPrefix (key , SopsPrefix ) {
139+ if strings .HasPrefix (key , stores . SopsPrefix ) {
192140 return true
193141 }
194142 }
0 commit comments