Other: Clear keychain entries on factory reset

This commit is contained in:
James Houlahan
2022-10-26 15:59:38 +02:00
parent 4a31017332
commit 7b7a2068ea
2 changed files with 29 additions and 0 deletions

View File

@ -23,9 +23,11 @@ import (
"net"
"github.com/Masterminds/semver/v3"
"github.com/ProtonMail/proton-bridge/v2/internal/constants"
"github.com/ProtonMail/proton-bridge/v2/internal/updater"
"github.com/ProtonMail/proton-bridge/v2/internal/user"
"github.com/ProtonMail/proton-bridge/v2/internal/vault"
"github.com/ProtonMail/proton-bridge/v2/pkg/keychain"
"github.com/sirupsen/logrus"
)
@ -284,6 +286,18 @@ func (bridge *Bridge) FactoryReset(ctx context.Context) {
if err := bridge.locator.Clear(); err != nil {
logrus.WithError(err).Error("Failed to clear data paths")
}
// Lastly clear the keychain.
vaultDir, err := bridge.locator.ProvideSettingsPath()
if err != nil {
logrus.WithError(err).Error("Failed to get vault dir")
} else if helper, err := vault.GetHelper(vaultDir); err != nil {
logrus.WithError(err).Error("Failed to get keychain helper")
} else if keychain, err := keychain.NewKeychain(helper, constants.KeyChainName); err != nil {
logrus.WithError(err).Error("Failed to get keychain")
} else if err := keychain.Clear(); err != nil {
logrus.WithError(err).Error("Failed to clear keychain")
}
}
func getPort(addr net.Addr) int {

View File

@ -125,6 +125,21 @@ func (kc *Keychain) Delete(userID string) error {
return kc.helper.Delete(kc.secretURL(userID))
}
func (kc *Keychain) Clear() error {
entries, err := kc.List()
if err != nil {
return err
}
for _, entry := range entries {
if err := kc.Delete(entry); err != nil {
return err
}
}
return nil
}
// Get returns the username and secret for the given userID.
func (kc *Keychain) Get(userID string) (string, string, error) {
kc.locker.Lock()