diff --git a/Changelog.md b/Changelog.md index f5314b14..825be04b 100644 --- a/Changelog.md +++ b/Changelog.md @@ -11,6 +11,7 @@ Changelog [format](http://keepachangelog.com/en/1.0.0/) ### Fixed * GODT-356 Fix crash when removing account while mail client is fetching messages (regression from GODT-204) +* GODT-390 Don't logout user if AuthRefresh fails because internet was off. ## [v1.2.7] Donghai-hotfix - beta (2020-05-07) diff --git a/pkg/pmapi/client.go b/pkg/pmapi/client.go index 521dae41..0095a982 100644 --- a/pkg/pmapi/client.go +++ b/pkg/pmapi/client.go @@ -21,7 +21,6 @@ import ( "bytes" "context" "encoding/json" - "errors" "fmt" "io" "io/ioutil" @@ -35,6 +34,7 @@ import ( pmcrypto "github.com/ProtonMail/gopenpgp/crypto" "github.com/jaytaylor/html2text" + "github.com/pkg/errors" "github.com/sirupsen/logrus" ) @@ -460,8 +460,10 @@ func (c *client) refreshAccessToken() (err error) { } if _, err := c.AuthRefresh(refreshToken); err != nil { - c.sendAuth(nil) - return err + if err != ErrAPINotReachable { + c.sendAuth(nil) + } + return errors.Wrap(err, "failed to refresh auth") } return diff --git a/pkg/pmapi/clientmanager.go b/pkg/pmapi/clientmanager.go index e74c02d1..590d49e5 100644 --- a/pkg/pmapi/clientmanager.go +++ b/pkg/pmapi/clientmanager.go @@ -293,11 +293,8 @@ func (cm *ClientManager) GetAuthUpdateChannel() chan ClientAuth { return cm.authUpdates } -// Errors for possible connection issues -var ( - ErrNoInternetConnection = errors.New("no internet connection") - ErrCanNotReachAPI = errors.New("can not reach PM API") -) +// ErrNoInternetConnection indicates that both protonstatus and the API are unreachable. +var ErrNoInternetConnection = errors.New("no internet connection") // CheckConnection returns an error if there is no internet connection. // This should be moved to the ConnectionManager when it is implemented. @@ -324,7 +321,7 @@ func (cm *ClientManager) CheckConnection() error { case errStatus == nil && errAPI != nil: cm.log.Error("ProtonStatus is reachable but API is not") - return ErrCanNotReachAPI + return ErrAPINotReachable case errStatus != nil && errAPI == nil: cm.log.Warn("API is reachable but protonstatus is not")