gopasspw--gopass
76 行
2.3 KiB
Go
76 行
2.3 KiB
Go
package leaf
|
|
|
|
import (
|
|
"bytes"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/gopasspw/gopass/internal/backend"
|
|
_ "github.com/gopasspw/gopass/internal/backend/crypto"
|
|
"github.com/gopasspw/gopass/internal/backend/crypto/gpg"
|
|
_ "github.com/gopasspw/gopass/internal/backend/storage"
|
|
"github.com/gopasspw/gopass/internal/config"
|
|
"github.com/gopasspw/gopass/internal/out"
|
|
"github.com/gopasspw/gopass/pkg/gopass/secrets"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestSet(t *testing.T) {
|
|
ctx := gpg.WithAlwaysTrust(config.NewContextInMemory(), true)
|
|
|
|
s, err := createSubStore(t)
|
|
require.NoError(t, err)
|
|
|
|
sec := secrets.NewAKV()
|
|
sec.SetPassword("foo")
|
|
_, err = sec.Write([]byte("bar"))
|
|
require.NoError(t, err)
|
|
require.NoError(t, s.Set(ctx, "zab/zab", sec))
|
|
|
|
require.Error(t, s.Set(ctx, "../../../../../etc/passwd", sec))
|
|
|
|
require.NoError(t, s.Set(ctx, "zab", sec))
|
|
}
|
|
|
|
// TestSetWarnsAboutInvalidRecipient verifies that when a recipient has no
|
|
// useable key (e.g. because it is expired or not present in the keyring),
|
|
// gopass emits a visible warning instead of silently omitting that recipient.
|
|
func TestSetWarnsAboutInvalidRecipient(t *testing.T) {
|
|
buf := &bytes.Buffer{}
|
|
oldStderr := out.Stderr
|
|
out.Stderr = buf
|
|
t.Cleanup(func() { out.Stderr = oldStderr })
|
|
|
|
dir := t.TempDir()
|
|
sd := filepath.Join(dir, "sub")
|
|
|
|
// 0xDEADBEEF is in the plain backend's static key list; 0xBADKEY is not.
|
|
_, _, err := createStore(sd, []string{"0xDEADBEEF", "0xBADKEY"}, nil)
|
|
require.NoError(t, err)
|
|
|
|
t.Setenv("GOPASS_HOMEDIR", dir)
|
|
t.Setenv("CHECKPOINT_DISABLE", "true")
|
|
t.Setenv("GOPASS_NO_NOTIFY", "true")
|
|
t.Setenv("GOPASS_DISABLE_ENCRYPTION", "true")
|
|
t.Setenv("GNUPGHOME", filepath.Join(dir, ".gnupg"))
|
|
require.NoError(t, os.Unsetenv("PAGER"))
|
|
|
|
ctx := gpg.WithAlwaysTrust(config.NewContextInMemory(), true)
|
|
ctx, err = backend.WithCryptoBackendString(ctx, "plain")
|
|
require.NoError(t, err)
|
|
ctx, err = backend.WithStorageBackendString(ctx, "fs")
|
|
require.NoError(t, err)
|
|
|
|
s, err := New(ctx, "", sd)
|
|
require.NoError(t, err)
|
|
|
|
sec := secrets.NewAKV()
|
|
sec.SetPassword("hunter2")
|
|
require.NoError(t, s.Set(ctx, "test/entry", sec))
|
|
|
|
// A warning about the recipient with no useable key must have been printed.
|
|
assert.Contains(t, buf.String(), "0xBADKEY")
|
|
}
|