connector/client: check for auth key on login check

Signed-off-by: Sumner Evans <sumner.evans@automattic.com>
This commit is contained in:
Sumner Evans
2024-10-29 14:28:03 -06:00
parent f195e2cac0
commit aa7a2d186b
+23 -5
View File
@@ -15,6 +15,7 @@ import (
"github.com/gotd/td/telegram/updates" "github.com/gotd/td/telegram/updates"
"github.com/gotd/td/tg" "github.com/gotd/td/tg"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"go.mau.fi/util/exsync" "go.mau.fi/util/exsync"
"go.mau.fi/zerozap" "go.mau.fi/zerozap"
"go.uber.org/zap" "go.uber.org/zap"
@@ -385,19 +386,25 @@ func (t *TelegramClient) onDead() {
func (t *TelegramClient) onConnectionStateChange(reason string) func() { func (t *TelegramClient) onConnectionStateChange(reason string) func() {
return func() { return func() {
t.main.Bridge.Log.Info(). log := t.main.Bridge.Log.With().
Str("component", "telegram_client"). Str("component", "telegram_client").
Str("user_login_id", string(t.userLogin.ID)). Str("user_login_id", string(t.userLogin.ID)).
Str("reason", reason). Str("reason", reason).
Msg("Connection state changed") Logger()
log.Info().Msg("Connection state changed")
ctx := log.WithContext(context.Background())
authStatus, err := t.client.Auth().Status(context.Background()) authStatus, err := t.client.Auth().Status(ctx)
if err != nil { if err != nil {
t.userLogin.BridgeState.Send(status.BridgeState{ t.userLogin.BridgeState.Send(status.BridgeState{
StateEvent: status.StateUnknownError, StateEvent: status.StateUnknownError,
Error: "tg-not-authenticated", Error: "tg-not-authenticated",
Message: err.Error(), Message: err.Error(),
}) })
t.userLogin.Metadata.(*UserLoginMetadata).Session.AuthKey = nil
if err := t.userLogin.Save(ctx); err != nil {
log.Err(err).Msg("failed to save user login")
}
} 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})
} else { } else {
@@ -406,6 +413,10 @@ func (t *TelegramClient) onConnectionStateChange(reason string) func() {
Error: "tg-no-auth", Error: "tg-no-auth",
Message: "You're not logged in", Message: "You're not logged in",
}) })
t.userLogin.Metadata.(*UserLoginMetadata).Session.AuthKey = nil
if err := t.userLogin.Save(ctx); err != nil {
log.Err(err).Msg("failed to save user login")
}
} }
} }
} }
@@ -416,9 +427,17 @@ func (t *TelegramClient) onAuthError(err error) {
Error: "tg-no-auth", Error: "tg-no-auth",
Message: err.Error(), Message: err.Error(),
}) })
t.userLogin.Metadata.(*UserLoginMetadata).Session.AuthKey = nil
if err := t.userLogin.Save(context.Background()); err != nil {
log.Err(err).Msg("failed to save user login")
}
} }
func (t *TelegramClient) Connect(ctx context.Context) (err error) { func (t *TelegramClient) Connect(ctx context.Context) (err error) {
if len(t.userLogin.Metadata.(*UserLoginMetadata).Session.AuthKey) != 256 {
return errors.New("user does not have an auth key")
}
ctx, t.clientCancel, err = connectTelegramClient(ctx, t.client) ctx, t.clientCancel, err = connectTelegramClient(ctx, t.client)
if err != nil { if err != nil {
return err return err
@@ -583,8 +602,7 @@ func (t *TelegramClient) getUserInfoFromTelegramUser(ctx context.Context, u tg.U
} }
func (t *TelegramClient) IsLoggedIn() bool { func (t *TelegramClient) IsLoggedIn() bool {
_, err := t.client.Self(context.TODO()) return t.client != nil && t.userLogin.Metadata.(*UserLoginMetadata).Session.AuthKey == nil
return err == nil
} }
func (t *TelegramClient) LogoutRemote(ctx context.Context) { func (t *TelegramClient) LogoutRemote(ctx context.Context) {