Add proper bridge state errors for different logout types

This commit is contained in:
Tulir Asokan 2022-03-15 16:04:10 +02:00
parent 44f232f37b
commit 73241b6f21
2 changed files with 11 additions and 1 deletions

View file

@ -48,6 +48,8 @@ type BridgeErrorCode string
const ( const (
WALoggedOut BridgeErrorCode = "wa-logged-out" WALoggedOut BridgeErrorCode = "wa-logged-out"
WAAccountBanned BridgeErrorCode = "wa-account-banned"
WAUnknownLogout BridgeErrorCode = "wa-unknown-logout"
WANotConnected BridgeErrorCode = "wa-not-connected" WANotConnected BridgeErrorCode = "wa-not-connected"
WAConnecting BridgeErrorCode = "wa-connecting" WAConnecting BridgeErrorCode = "wa-connecting"
WAServerTimeout BridgeErrorCode = "wa-server-timeout" WAServerTimeout BridgeErrorCode = "wa-server-timeout"
@ -56,6 +58,8 @@ const (
var bridgeHumanErrors = map[BridgeErrorCode]string{ var bridgeHumanErrors = map[BridgeErrorCode]string{
WALoggedOut: "You were logged out from another device. Relogin to continue using the bridge.", WALoggedOut: "You were logged out from another device. Relogin to continue using the bridge.",
WAAccountBanned: "Your account was banned from WhatsApp. You can contact support from the WhatsApp mobile app on your phone.",
WAUnknownLogout: "You were logged out for an unknown reason. Relogin to continue using the bridge.",
WANotConnected: "You're not connected to WhatsApp", WANotConnected: "You're not connected to WhatsApp",
WAConnecting: "Reconnecting to WhatsApp...", WAConnecting: "Reconnecting to WhatsApp...",
WAServerTimeout: "The WhatsApp web servers are not responding. The bridge will try to reconnect.", WAServerTimeout: "The WhatsApp web servers are not responding. The bridge will try to reconnect.",

View file

@ -875,7 +875,13 @@ func (user *User) UpdateDirectChats(chats map[id.UserID][]id.RoomID) {
} }
func (user *User) handleLoggedOut(onConnect bool, reason events.ConnectFailureReason) { func (user *User) handleLoggedOut(onConnect bool, reason events.ConnectFailureReason) {
user.removeFromJIDMap(BridgeState{StateEvent: StateBadCredentials, Error: WALoggedOut, Message: reason.String()}) errorCode := WAUnknownLogout
if reason == events.ConnectFailureLoggedOut {
errorCode = WALoggedOut
} else if reason == events.ConnectFailureBanned {
errorCode = WAAccountBanned
}
user.removeFromJIDMap(BridgeState{StateEvent: StateBadCredentials, Error: errorCode})
user.DeleteConnection() user.DeleteConnection()
user.Session = nil user.Session = nil
user.JID = types.EmptyJID user.JID = types.EmptyJID