diff --git a/keyring.go b/keyring.go index db414e6..73eb164 100644 --- a/keyring.go +++ b/keyring.go @@ -67,6 +67,8 @@ type DataStore interface { // CleanStorage cleanups storage (credentials or key-value). // Error is returned if the vault couldn't be unlocked. CleanStorage(item SecretItem) error + // Exists checks if keyring exists in persistent storage. + Exists() bool // Save saves the keyring to the persistent storage. Save() error // Destroy removes the keyring from the persistent storage. @@ -77,6 +79,7 @@ type DataStore interface { type Keyring interface { launchr.Service DataStore + ResetStorage() } type keyringService struct { @@ -97,6 +100,11 @@ func (k *keyringService) ServiceInfo() launchr.ServiceInfo { return launchr.ServiceInfo{} } +// ResetStorage cleans store for subsequent reload. +func (k *keyringService) ResetStorage() { + k.store = nil +} + func (k *keyringService) defaultStore() (DataStore, error) { if k.store != nil { return k.store, nil @@ -167,6 +175,15 @@ func (k *keyringService) CleanStorage(item SecretItem) error { return s.CleanStorage(item) } +// Exists checks if keyring exists in persistent storage. +func (k *keyringService) Exists() bool { + s, err := k.defaultStore() + if err != nil { + return false + } + return s.Exists() +} + // Save implements DataStore interface. Uses service default store. func (k *keyringService) Save() error { s, err := k.defaultStore() diff --git a/yaml.go b/yaml.go index fc989f5..c2ad501 100644 --- a/yaml.go +++ b/yaml.go @@ -175,6 +175,20 @@ func (s *dataStoreYaml) CleanStorage(item SecretItem) error { return nil } +// Exists checks if keyring exists in persistent storage. +func (s *dataStoreYaml) Exists() bool { + ageStorage, ok := s.file.(*ageFile) + if !ok { + panic("impossible type assertion") + } + + info, err := os.Stat(ageStorage.file.fname) + if os.IsNotExist(err) { + return false + } + return !info.IsDir() +} + // Save implements DataStore interface. func (s *dataStoreYaml) Save() error { err := s.file.Open(os.O_CREATE|os.O_RDWR|os.O_TRUNC, 0600)