Add proper error message for multi-device

This commit is contained in:
Tulir Asokan 2021-09-23 14:08:15 -04:00
parent 59fa4e6480
commit 74870ec638
4 changed files with 22 additions and 10 deletions

4
go.mod
View file

@ -12,7 +12,7 @@ require (
gopkg.in/yaml.v2 v2.4.0
maunium.net/go/mauflag v1.0.0
maunium.net/go/maulogger/v2 v2.3.0
maunium.net/go/mautrix v0.9.23
maunium.net/go/mautrix v0.9.27
)
replace github.com/Rhymen/go-whatsapp => github.com/tulir/go-whatsapp v0.5.11
replace github.com/Rhymen/go-whatsapp => github.com/tulir/go-whatsapp v0.5.12

8
go.sum
View file

@ -138,8 +138,8 @@ github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU=
github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
github.com/tidwall/sjson v1.1.5 h1:wsUceI/XDyZk3J1FUvuuYlK62zJv2HO2Pzb8A5EWdUE=
github.com/tidwall/sjson v1.1.5/go.mod h1:VuJzsZnTowhSxWdOgsAnb886i4AjEyTkk7tNtsL7EYE=
github.com/tulir/go-whatsapp v0.5.11 h1:e1EVhygdJ/YEdAIF9a6I4fIcW1l3qQcQs+h5loJVgRA=
github.com/tulir/go-whatsapp v0.5.11/go.mod h1:7J3IIL3bEQiBJGtiZst1N4PgXHlWIartdVQLe6lcx9A=
github.com/tulir/go-whatsapp v0.5.12 h1:JGU5yhoh+CyDcSMUilwy7FL0gFo0zqqepsHRqEjrjKc=
github.com/tulir/go-whatsapp v0.5.12/go.mod h1:7J3IIL3bEQiBJGtiZst1N4PgXHlWIartdVQLe6lcx9A=
golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
@ -217,5 +217,5 @@ maunium.net/go/mauflag v1.0.0/go.mod h1:nLivPOpTpHnpzEh8jEdSL9UqO9+/KBJFmNRlwKfk
maunium.net/go/maulogger/v2 v2.2.4/go.mod h1:TYWy7wKwz/tIXTpsx8G3mZseIRiC5DoMxSZazOHy68A=
maunium.net/go/maulogger/v2 v2.3.0 h1:TMCcO65fLk6+pJXo7sl38tzjzW0KBFgc6JWJMBJp4GE=
maunium.net/go/maulogger/v2 v2.3.0/go.mod h1:TYWy7wKwz/tIXTpsx8G3mZseIRiC5DoMxSZazOHy68A=
maunium.net/go/mautrix v0.9.23 h1:CoRCCVHSs0R2NjRcrFDUBlOrhvVixaj1PSE7jR8ghMs=
maunium.net/go/mautrix v0.9.23/go.mod h1:7IzKfWvpQtN+W2Lzxc0rLvIxFM3ryKX6Ys3S/ZoWbg8=
maunium.net/go/mautrix v0.9.27 h1:6MV6YSCGqfw8Rb0G1PHjTOkYkTY0vcZaz6wd+U+V1Is=
maunium.net/go/mautrix v0.9.27/go.mod h1:7IzKfWvpQtN+W2Lzxc0rLvIxFM3ryKX6Ys3S/ZoWbg8=

View file

@ -414,6 +414,8 @@ func (prov *ProvisioningAPI) Login(w http.ResponseWriter, r *http.Request) {
} else if errors.Is(err, whatsapp.ErrInvalidWebsocket) {
msg = "WhatsApp connection error. Please try again."
// TODO might need to make sure it reconnects?
} else if errors.Is(err, whatsapp.ErrMultiDeviceNotSupported) {
msg = "WhatsApp multi-device is not currently supported. Please disable it and try again."
} else {
msg = fmt.Sprintf("Unknown error while logging in: %v", err)
}

18
user.go
View file

@ -415,6 +415,8 @@ func (user *User) Login(ce *CommandEvent) {
reply.Body = "You have a login in progress already."
} else if err == whatsapp.ErrLoginTimedOut {
reply.Body = "QR code scan timed out. Please try again."
} else if errors.Is(err, whatsapp.ErrMultiDeviceNotSupported) {
reply.Body = "WhatsApp multi-device is not currently supported. Please disable it and try again."
} else {
user.log.Warnln("Failed to log in:", err)
reply.Body = fmt.Sprintf("Unknown error while logging in: %v", err)
@ -976,6 +978,10 @@ func (user *User) HandleError(err error) {
user.log.Errorfln("WhatsApp error: %v", err)
}
if closed, ok := err.(*whatsapp.ErrConnectionClosed); ok {
if user.Session == nil {
user.log.Debugln("Websocket disconnected, but no session stored, not trying to reconnect")
return
}
user.bridge.Metrics.TrackDisconnection(user.MXID)
if closed.Code == 1000 && user.cleanDisconnection {
user.cleanDisconnection = false
@ -1054,14 +1060,18 @@ func (user *User) tryReconnect(msg string) {
if err != nil {
user.log.Debugln("Error while disconnecting for connection reset:", err)
}
} else if errors.Is(err, whatsapp.ErrUnpaired) {
user.log.Errorln("Got init 401 (unpaired) error when trying to reconnect, not retrying")
} else if errors.Is(err, whatsapp.ErrUnpaired) || errors.Is(err, whatsapp.ErrInvalidSession) {
user.log.Errorfln("Got init %s error when trying to reconnect, not retrying", err)
user.removeFromJIDMap(StateBadCredentials)
//user.JID = ""
user.SetSession(nil)
user.DeleteConnection()
user.sendMarkdownBridgeAlert("\u26a0 Failed to reconnect to WhatsApp: unpaired from phone. " +
"To re-pair your phone, log in again.")
errMsg := "unpaired from phone"
if errors.Is(err, whatsapp.ErrInvalidSession) {
errMsg = "invalid session"
}
user.sendMarkdownBridgeAlert("\u26a0 Failed to reconnect to WhatsApp: %s. " +
"To re-pair your phone, log in again.", errMsg)
return
} else if errors.Is(err, whatsapp.ErrAlreadyLoggedIn) {
user.log.Warnln("Reconnection said we're already logged in, not trying anymore")