1package leaf 2 3import ( 4 "context" 5 "fmt" 6 7 "github.com/gopasspw/gopass/internal/backend" 8 "github.com/gopasspw/gopass/internal/out" 9 "github.com/gopasspw/gopass/internal/store" 10 "github.com/gopasspw/gopass/pkg/debug" 11 "github.com/gopasspw/gopass/pkg/gopass" 12 "github.com/gopasspw/gopass/pkg/gopass/secrets/secparse" 13) 14 15// GitInit initializes the git storage 16func (s *Store) GitInit(ctx context.Context) error { 17 storage, err := backend.InitStorage(ctx, backend.GetStorageBackend(ctx), s.path) 18 if err != nil { 19 return err 20 } 21 s.storage = storage 22 return nil 23} 24 25// ListRevisions will list all revisions for a secret 26func (s *Store) ListRevisions(ctx context.Context, name string) ([]backend.Revision, error) { 27 p := s.passfile(name) 28 return s.storage.Revisions(ctx, p) 29} 30 31// GetRevision will retrieve a single revision from the backend 32func (s *Store) GetRevision(ctx context.Context, name, revision string) (gopass.Secret, error) { 33 p := s.passfile(name) 34 ciphertext, err := s.storage.GetRevision(ctx, p, revision) 35 if err != nil { 36 return nil, fmt.Errorf("failed to get ciphertext of %q@%q: %w", name, revision, err) 37 } 38 39 content, err := s.crypto.Decrypt(ctx, ciphertext) 40 if err != nil { 41 debug.Log("Decryption failed: %s", err) 42 return nil, store.ErrDecrypt 43 } 44 45 sec, err := secparse.Parse(content) 46 if err != nil { 47 debug.Log("Failed to parse YAML: %s", err) 48 } 49 return sec, nil 50} 51 52// GitStatus shows the git status output 53func (s *Store) GitStatus(ctx context.Context, _ string) error { 54 buf, err := s.storage.Status(ctx) 55 if err != nil { 56 return err 57 } 58 out.Printf(ctx, string(buf)) 59 return nil 60} 61