mirror of
https://github.com/gopasspw/gopass.git
synced 2026-06-07 15:37:42 +02:00
1e7a6b160a
* Maintain secret structure when parsing
This commit introduces a new KV secret type ("AKV") that fully maintains
the secret format when parsing. As such it obsoletes the old KV and
Plain formats and the need for the core.parsing option.
Fixes #2431
RELEASE_NOTES=[ENHANCEMENT] Maintain secret structure when parsing
Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
* Update internal/action/edit.go
Co-authored-by: Yolan Romailler <AnomalRoil@users.noreply.github.com>
* Address review comments
This brings back the noparsing flag since we need this to cover some
corners cases.
RELEASE_NOTES=n/a
Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
Co-authored-by: Yolan Romailler <AnomalRoil@users.noreply.github.com>
66 lines
1.6 KiB
Go
66 lines
1.6 KiB
Go
package secparse
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/gopasspw/gopass/pkg/gopass/secrets"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestParse(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
for _, tc := range []string{
|
|
"foo\n", // Plain
|
|
"foo\nbar\n", // Plain
|
|
"foo\nbar: baz\n", // KV
|
|
"foo\nbar\n---\nzab: 1\n", // YAML
|
|
secrets.Ident + "\nFoo: Bar\n\nBarfoo\n", // MIME
|
|
secrets.Ident + "\nFoo: Bar\n\nBarfoo", // MIME
|
|
} {
|
|
_, err := Parse([]byte(tc))
|
|
require.NoError(t, err)
|
|
}
|
|
}
|
|
|
|
func TestParsedIsSerialized(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
for _, tc := range []string{
|
|
"foo\n", // Plain
|
|
"foo\nbar\n", // Plain
|
|
"foo\nbar: baz\n", // KV
|
|
"foo\nbar\n---\nzab: 1\n", // YAML
|
|
// MIME is forcefully converted to KV
|
|
} {
|
|
sec, err := Parse([]byte(tc))
|
|
require.NoError(t, err)
|
|
assert.Equal(t, tc, string(sec.Bytes()), tc)
|
|
}
|
|
}
|
|
|
|
func FuzzParse(f *testing.F) {
|
|
for _, tc := range []string{
|
|
"foo\n", // Plain
|
|
"foo\nbar\n", // Plain
|
|
"foo\nbar: baz\n", // KV
|
|
"foo\nbar\n---\nzab: 1\n", // YAML
|
|
secrets.Ident + "\nFoo: Bar\n\nBarfoo\n", // MIME
|
|
secrets.Ident + "\nFoo: Bar\n\nBarfoo", // MIME
|
|
} {
|
|
f.Add(tc)
|
|
}
|
|
|
|
f.Fuzz(func(t *testing.T, in string) {
|
|
sec, err := Parse([]byte(in))
|
|
if err != nil {
|
|
t.Fatalf("Parse failed to decode a valid secret %q: %v", in, err)
|
|
}
|
|
|
|
if sec == nil {
|
|
t.Errorf("secret should not be nil")
|
|
}
|
|
})
|
|
}
|