connector: send BAD_CREDENTIALS if error is an auth error
Previously, we were going into UNKNOWN_ERROR too aggressively Signed-off-by: Sumner Evans <sumner.evans@automattic.com>
This commit is contained in:
+33
-25
@@ -376,26 +376,38 @@ func connectTelegramClient(ctx context.Context, client *telegram.Client) (contex
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (t *TelegramClient) onDead() {
|
func (t *TelegramClient) onDead() {
|
||||||
|
prevState := t.userLogin.BridgeState.GetPrev().StateEvent
|
||||||
|
if slices.Contains([]status.BridgeStateEvent{
|
||||||
|
status.StateTransientDisconnect,
|
||||||
|
status.StateBadCredentials,
|
||||||
|
status.StateLoggedOut,
|
||||||
|
status.StateUnknownError,
|
||||||
|
}, prevState) {
|
||||||
|
t.userLogin.Log.Warn().
|
||||||
|
Str("prev_state", string(prevState)).
|
||||||
|
Msg("client is dead, not sending transient disconnect, because already in an error state")
|
||||||
|
return
|
||||||
|
}
|
||||||
t.userLogin.BridgeState.Send(status.BridgeState{
|
t.userLogin.BridgeState.Send(status.BridgeState{
|
||||||
StateEvent: status.StateTransientDisconnect,
|
StateEvent: status.StateTransientDisconnect,
|
||||||
Message: "Telegram client disconnected",
|
Message: "Telegram client disconnected",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *TelegramClient) sendBadCredentials(message string) {
|
func (t *TelegramClient) sendBadCredentialsOrUnknownError(err error) {
|
||||||
t.userLogin.BridgeState.Send(status.BridgeState{
|
if auth.IsUnauthorized(err) {
|
||||||
StateEvent: status.StateBadCredentials,
|
t.userLogin.BridgeState.Send(status.BridgeState{
|
||||||
Error: "tg-no-auth",
|
StateEvent: status.StateBadCredentials,
|
||||||
Message: message,
|
Error: "tg-no-auth",
|
||||||
})
|
Message: humanise.Error(err),
|
||||||
}
|
})
|
||||||
|
} else {
|
||||||
func (t *TelegramClient) sendUnknownError(err error) {
|
t.userLogin.BridgeState.Send(status.BridgeState{
|
||||||
t.userLogin.BridgeState.Send(status.BridgeState{
|
StateEvent: status.StateUnknownError,
|
||||||
StateEvent: status.StateUnknownError,
|
Error: "tg-unknown-error",
|
||||||
Error: "tg-unknown-error",
|
Message: humanise.Error(err),
|
||||||
Message: humanise.Error(err),
|
})
|
||||||
})
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *TelegramClient) onConnectionStateChange(reason string) func() {
|
func (t *TelegramClient) onConnectionStateChange(reason string) func() {
|
||||||
@@ -419,7 +431,7 @@ func (t *TelegramClient) onConnectionStateChange(reason string) func() {
|
|||||||
t.Disconnect()
|
t.Disconnect()
|
||||||
t.Connect(ctx)
|
t.Connect(ctx)
|
||||||
} else {
|
} else {
|
||||||
t.sendUnknownError(err)
|
t.sendBadCredentialsOrUnknownError(err)
|
||||||
}
|
}
|
||||||
} else if authStatus.Authorized {
|
} else if authStatus.Authorized {
|
||||||
t.userLogin.BridgeState.Send(status.BridgeState{StateEvent: status.StateConnected})
|
t.userLogin.BridgeState.Send(status.BridgeState{StateEvent: status.StateConnected})
|
||||||
@@ -430,7 +442,7 @@ func (t *TelegramClient) onConnectionStateChange(reason string) func() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (t *TelegramClient) onAuthError(ctx context.Context, err error) {
|
func (t *TelegramClient) onAuthError(ctx context.Context, err error) {
|
||||||
t.sendBadCredentials(humanise.Error(err))
|
t.sendBadCredentialsOrUnknownError(err)
|
||||||
t.userLogin.Metadata.(*UserLoginMetadata).ResetOnLogout()
|
t.userLogin.Metadata.(*UserLoginMetadata).ResetOnLogout()
|
||||||
t.client = nil
|
t.client = nil
|
||||||
t.updatesManager.Reset()
|
t.updatesManager.Reset()
|
||||||
@@ -441,25 +453,21 @@ func (t *TelegramClient) onAuthError(ctx context.Context, err error) {
|
|||||||
|
|
||||||
func (t *TelegramClient) Connect(ctx context.Context) {
|
func (t *TelegramClient) Connect(ctx context.Context) {
|
||||||
if !t.userLogin.Metadata.(*UserLoginMetadata).Session.HasAuthKey() {
|
if !t.userLogin.Metadata.(*UserLoginMetadata).Session.HasAuthKey() {
|
||||||
t.sendBadCredentials("User does not have an auth key")
|
t.sendBadCredentialsOrUnknownError(errors.New("user does not have an auth key"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
ctx, t.clientCancel, err = connectTelegramClient(ctx, t.client)
|
ctx, t.clientCancel, err = connectTelegramClient(ctx, t.client)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.sendUnknownError(err)
|
t.sendBadCredentialsOrUnknownError(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
go func() {
|
go func() {
|
||||||
err = t.updatesManager.Run(ctx, t.client.API(), t.telegramUserID, updates.AuthOptions{})
|
err = t.updatesManager.Run(ctx, t.client.API(), t.telegramUserID, updates.AuthOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
zerolog.Ctx(ctx).Err(err).Msg("failed to run updates manager")
|
zerolog.Ctx(ctx).Err(err).Msg("failed to run updates manager")
|
||||||
if auth.IsUnauthorized(err) {
|
t.sendBadCredentialsOrUnknownError(err)
|
||||||
t.sendBadCredentials(err.Error())
|
|
||||||
} else {
|
|
||||||
t.sendUnknownError(err)
|
|
||||||
}
|
|
||||||
t.clientCancel()
|
t.clientCancel()
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
@@ -467,9 +475,9 @@ func (t *TelegramClient) Connect(ctx context.Context) {
|
|||||||
// Update the logged-in user's ghost info (this also updates the user
|
// Update the logged-in user's ghost info (this also updates the user
|
||||||
// login's remote name and profile).
|
// login's remote name and profile).
|
||||||
if me, err := t.client.Self(ctx); err != nil {
|
if me, err := t.client.Self(ctx); err != nil {
|
||||||
t.sendUnknownError(err)
|
t.sendBadCredentialsOrUnknownError(err)
|
||||||
} else if _, err := t.updateGhost(ctx, t.telegramUserID, me); err != nil {
|
} else if _, err := t.updateGhost(ctx, t.telegramUserID, me); err != nil {
|
||||||
t.sendUnknownError(err)
|
t.sendBadCredentialsOrUnknownError(err)
|
||||||
} else {
|
} else {
|
||||||
t.userLogin.BridgeState.Send(status.BridgeState{StateEvent: status.StateConnected})
|
t.userLogin.BridgeState.Send(status.BridgeState{StateEvent: status.StateConnected})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user