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

Commit ef033ac

Browse files
committed
Merge branch 'develop' into fix/migrate-config-whitespaces
2 parents a767ca5 + af3917c commit ef033ac

4 files changed

Lines changed: 42 additions & 31 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: 16 additions & 17 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,23 +35,28 @@ 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
5761
output := regexpSecretTemplateTags.ReplaceAllStringFunc(string(raw), func(templateTag string) string {
5862
path := regexpSecretTemplateTags.FindStringSubmatch(templateTag)[1]
@@ -81,15 +85,10 @@ func migrateTemplateTags(inFile io.Reader, outFile string, mapping referenceMapp
8185
errMsg += "\nDid you specify every possible value for your template variables? E.g. --var varname1=a,b,c,d --var varname2=x,y,z"
8286
}
8387

84-
return nil, fmt.Errorf(errMsg)
85-
}
86-
87-
err = ioutil.WriteFile(outFile, []byte(output), 0666)
88-
if err != nil {
89-
return nil, err
88+
return "", 0, fmt.Errorf(errMsg)
9089
}
9190

92-
return hits, nil
91+
return output, len(hits), nil
9392
}
9493

9594
type MigrateConfigTemplatesCommand struct {

internals/secrethub/migrate_config_test.go

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

33
import (
4-
"bytes"
5-
"io/ioutil"
64
"testing"
75

86
"github.com/secrethub/secrethub-go/internals/assert"
@@ -194,21 +192,20 @@ func TestMigrateTemplates(t *testing.T) {
194192
},
195193
} {
196194
t.Run(name, func(t *testing.T) {
195+
var out string
197196
m := referenceMapping(tc.mapping)
198197
m.stripSecretHubURIScheme()
199198
err := m.addVarPossibilities(tc.vars)
200199
assert.OK(t, err)
201200

202-
_, err = migrateTemplateTags(bytes.NewReader([]byte(tc.in)), "test.yml.tpl", m, "{{ %s }}")
201+
out, _, err = migrateTemplateTags(tc.in, m, "{{ %s }}")
203202
if tc.expectedErr {
204203
assert.Equal(t, err != nil, true)
205204
return
206205
}
207206

208207
assert.OK(t, err)
209-
res, err := ioutil.ReadFile("test.yml.tpl")
210-
assert.OK(t, err)
211-
assert.Equal(t, string(res), tc.expected)
208+
assert.Equal(t, out, tc.expected)
212209
})
213210
}
214211
}
@@ -399,6 +396,7 @@ func TestMigrateEnvfile(t *testing.T) {
399396
},
400397
} {
401398
t.Run(name, func(t *testing.T) {
399+
var out string
402400
m := referenceMapping(tc.mapping)
403401
m.stripSecretHubURIScheme()
404402
err := m.addVarPossibilities(tc.vars)
@@ -410,7 +408,7 @@ func TestMigrateEnvfile(t *testing.T) {
410408
return err
411409
}
412410

413-
_, err = migrateTemplateTags(bytes.NewReader([]byte(tc.in)), ".env", m, "%s")
411+
out, _, err = migrateTemplateTags(tc.in, m, "%s")
414412
return err
415413
}()
416414

@@ -420,9 +418,7 @@ func TestMigrateEnvfile(t *testing.T) {
420418
}
421419

422420
assert.OK(t, err)
423-
res, err := ioutil.ReadFile(".env")
424-
assert.OK(t, err)
425-
assert.Equal(t, string(res), tc.expected)
421+
assert.Equal(t, out, tc.expected)
426422
})
427423
}
428424
}

0 commit comments

Comments
 (0)