mirror of
https://github.com/gopasspw/gopass.git
synced 2025-12-08 19:24:54 +00:00
* feat: handle referencing in passwords Signed-off-by: Parham Alvani <parham.alvani@gmail.com> * feat: use seq over slice to improve performance Signed-off-by: Parham Alvani <parham.alvani@gmail.com> * feat: handle error during reference following Signed-off-by: Parham Alvani <parham.alvani@gmail.com> * feat: provide a flag for not following references Signed-off-by: Parham Alvani <parham.alvani@gmail.com> * feat: disable ref following on edit and remove the flag Signed-off-by: Parham Alvani <parham.alvani@gmail.com> * feat: provide a configuration for follow-references Signed-off-by: Parham Alvani <parham.alvani@gmail.com> * fix: correct configuration tests Signed-off-by: Parham Alvani <parham.alvani@gmail.com> * fix: correct tests and document the new flag Signed-off-by: Parham Alvani <parham.alvani@gmail.com> * fix: correct integration test Signed-off-by: Parham Alvani <parham.alvani@gmail.com> * fix: correct tests Signed-off-by: Parham Alvani <parham.alvani@gmail.com> --------- Signed-off-by: Parham Alvani <parham.alvani@gmail.com>
31 lines
622 B
Go
31 lines
622 B
Go
package root
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/gopasspw/gopass/pkg/ctxutil"
|
|
"github.com/gopasspw/gopass/pkg/gopass"
|
|
)
|
|
|
|
// Get returns the plaintext of a single key.
|
|
func (r *Store) Get(ctx context.Context, name string) (gopass.Secret, error) {
|
|
store, name := r.getStore(name)
|
|
|
|
sec, err := store.Get(ctx, name)
|
|
if err != nil {
|
|
return sec, err
|
|
}
|
|
|
|
if ref, ok := sec.Ref(); ctxutil.IsFollowRef(ctx) && ok {
|
|
refSec, err := store.Get(ctx, ref)
|
|
if err != nil {
|
|
return sec, fmt.Errorf("failed to read reference %s by %s: %w", ref, name, err)
|
|
}
|
|
|
|
sec.SetPassword(refSec.Password())
|
|
}
|
|
|
|
return sec, nil
|
|
}
|