login: implement QR login

Signed-off-by: Sumner Evans <sumner.evans@automattic.com>
This commit is contained in:
Sumner Evans
2024-08-27 10:51:24 -06:00
parent bbf53fb28b
commit 4d9ad4f0af
4 changed files with 353 additions and 155 deletions
+5 -5
View File
@@ -317,7 +317,7 @@ func NewTelegramClient(ctx context.Context, tc *TelegramConnector, login *bridge
// connectTelegramClient blocks until client is connected, calling Run
// internally.
// Technique from: https://github.com/gotd/contrib/blob/master/bg/connect.go
func connectTelegramClient(ctx context.Context, client *telegram.Client) (context.CancelFunc, error) {
func connectTelegramClient(ctx context.Context, client *telegram.Client) (context.Context, context.CancelFunc, error) {
ctx, cancel := context.WithCancel(ctx)
errC := make(chan error, 1)
@@ -337,14 +337,14 @@ func connectTelegramClient(ctx context.Context, client *telegram.Client) (contex
select {
case <-ctx.Done(): // context canceled
cancel()
return func() {}, ctx.Err()
return nil, func() {}, ctx.Err()
case err := <-errC: // startup timeout
cancel()
return func() {}, err
return nil, func() {}, err
case <-initDone: // init done
}
return cancel, nil
return ctx, cancel, nil
}
func (t *TelegramClient) onDead() {
@@ -382,7 +382,7 @@ func (t *TelegramClient) onAuthError(err error) {
}
func (t *TelegramClient) Connect(ctx context.Context) (err error) {
t.clientCancel, err = connectTelegramClient(ctx, t.client)
ctx, t.clientCancel, err = connectTelegramClient(ctx, t.client)
if err != nil {
return err
}