Skip to content
This repository was archived by the owner on Feb 16, 2023. It is now read-only.

Commit 9fad242

Browse files
committed
Adjust template tag migration function, preserve file mode when writing
1 parent 0cb4c70 commit 9fad242

3 files changed

Lines changed: 37 additions & 22 deletions

File tree

internals/secrethub/migrate_config_envfile.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package secrethub
22

33
import (
4-
"bytes"
54
"fmt"
65
"io/ioutil"
6+
"os"
77
"regexp"
88

99
"github.com/secrethub/secrethub-cli/internals/cli"
@@ -39,12 +39,22 @@ func (cmd *MigrateConfigEnvfileCommand) Run() error {
3939
return err
4040
}
4141

42-
replaceCount, err := migrateTemplateTags(bytes.NewBuffer(inFileContents), ".env", refMapping, "%s")
42+
output, replaceCount, err := migrateTemplateTags(string(inFileContents), refMapping, "%s")
4343
if err != nil {
4444
return err
4545
}
4646

47-
fmt.Fprintf(cmd.io.Output(), "Created new .env file with %d op:// references\n", len(replaceCount))
47+
inFileInfo, err := os.Stat(filepath)
48+
if err != nil {
49+
return ErrReadFile(filepath, err)
50+
}
51+
52+
err = ioutil.WriteFile(".env", []byte(output), inFileInfo.Mode())
53+
if err != nil {
54+
return err
55+
}
56+
57+
fmt.Fprintf(cmd.io.Output(), "Created new .env file with %d op:// references\n", replaceCount)
4858

4959
return nil
5060
}

internals/secrethub/migrate_config_references.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package secrethub
33
import (
44
"fmt"
55
"io/ioutil"
6+
"os"
67
"regexp"
78
"strings"
89

@@ -60,7 +61,12 @@ func migrateReferences(inFile string, outFile string, mapping referenceMapping)
6061
return nil, fmt.Errorf("no 1Password equivalent present in your migration plan for the following secrets:\n- %s", strings.Join(misses, "\n- "))
6162
}
6263

63-
err = ioutil.WriteFile(outFile, []byte(output), 0666)
64+
inFileInfo, err := os.Stat(inFile)
65+
if err != nil {
66+
return nil, ErrReadFile(inFile, err)
67+
}
68+
69+
err = ioutil.WriteFile(outFile, []byte(output), inFileInfo.Mode())
6470
if err != nil {
6571
return nil, err
6672
}

internals/secrethub/migrate_config_templates.go

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
package secrethub
22

33
import (
4-
"bytes"
54
"fmt"
6-
"io"
75
"io/ioutil"
6+
"os"
87
"regexp"
98
"strings"
109

@@ -36,25 +35,30 @@ func (cmd *MigrateConfigTemplatesCommand) Run() error {
3635
return ErrReadFile(filepath, err)
3736
}
3837

39-
replaceCount, err := migrateTemplateTags(bytes.NewBuffer(inFileContents), filepath, refMapping, "{{ %s }}")
38+
output, replaceCount, err := migrateTemplateTags(string(inFileContents), refMapping, "{{ %s }}")
4039
if err != nil {
4140
return err
4241
}
4342

44-
fmt.Fprintf(cmd.io.Output(), "Updated %s with %d op:// references\n", filepath, len(replaceCount))
43+
inFileInfo, err := os.Stat(filepath)
44+
if err != nil {
45+
return ErrReadFile(filepath, err)
46+
}
47+
48+
err = ioutil.WriteFile(filepath, []byte(output), inFileInfo.Mode())
49+
if err != nil {
50+
return err
51+
}
52+
53+
fmt.Fprintf(cmd.io.Output(), "Updated %s with %d op:// references\n", filepath, replaceCount)
4554
}
4655

4756
return nil
4857
}
4958

50-
func migrateTemplateTags(inFile io.Reader, outFile string, mapping referenceMapping, formatString string) ([]string, error) {
51-
raw, err := ioutil.ReadAll(inFile)
52-
if err != nil {
53-
return nil, ErrReadFile(inFile, err)
54-
}
55-
59+
func migrateTemplateTags(inFileContents string, mapping referenceMapping, formatString string) (string, int, error) {
5660
var hits, misses []string
57-
output := regexpSecretTemplateTags.ReplaceAllStringFunc(string(raw), func(templateTag string) string {
61+
output := regexpSecretTemplateTags.ReplaceAllStringFunc(inFileContents, func(templateTag string) string {
5862
path := regexpSecretTemplatePath.FindString(templateTag)
5963
if path == "" {
6064
misses = append(misses, templateTag)
@@ -85,15 +89,10 @@ func migrateTemplateTags(inFile io.Reader, outFile string, mapping referenceMapp
8589
errMsg += "\nDid you specify every possible value for your template variables? E.g. --var varname1=a,b,c,d --var varname2=x,y,z"
8690
}
8791

88-
return nil, fmt.Errorf(errMsg)
89-
}
90-
91-
err = ioutil.WriteFile(outFile, []byte(output), 0666)
92-
if err != nil {
93-
return nil, err
92+
return "", 0, fmt.Errorf(errMsg)
9493
}
9594

96-
return hits, nil
95+
return output, len(hits), nil
9796
}
9897

9998
type MigrateConfigTemplatesCommand struct {

0 commit comments

Comments
 (0)