Files
Dominik Schulz 1e7a6b160a Maintain secret structure when parsing (#2433)
* 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>
2022-12-01 22:53:40 +01:00

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")
}
})
}