forked from Silverfish/proton-bridge
Other: Clear keychain entries on factory reset
This commit is contained in:
@ -23,9 +23,11 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
|
|
||||||
"github.com/Masterminds/semver/v3"
|
"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/updater"
|
||||||
"github.com/ProtonMail/proton-bridge/v2/internal/user"
|
"github.com/ProtonMail/proton-bridge/v2/internal/user"
|
||||||
"github.com/ProtonMail/proton-bridge/v2/internal/vault"
|
"github.com/ProtonMail/proton-bridge/v2/internal/vault"
|
||||||
|
"github.com/ProtonMail/proton-bridge/v2/pkg/keychain"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -284,6 +286,18 @@ func (bridge *Bridge) FactoryReset(ctx context.Context) {
|
|||||||
if err := bridge.locator.Clear(); err != nil {
|
if err := bridge.locator.Clear(); err != nil {
|
||||||
logrus.WithError(err).Error("Failed to clear data paths")
|
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 {
|
func getPort(addr net.Addr) int {
|
||||||
|
|||||||
@ -125,6 +125,21 @@ func (kc *Keychain) Delete(userID string) error {
|
|||||||
return kc.helper.Delete(kc.secretURL(userID))
|
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.
|
// Get returns the username and secret for the given userID.
|
||||||
func (kc *Keychain) Get(userID string) (string, string, error) {
|
func (kc *Keychain) Get(userID string) (string, string, error) {
|
||||||
kc.locker.Lock()
|
kc.locker.Lock()
|
||||||
|
|||||||
Reference in New Issue
Block a user