From 30bfa14141c3d233612bf1fa42352dd8c338db25 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Tue, 18 Jul 2023 14:51:18 +0300 Subject: [PATCH] Don't send listen events in the non-authed poller --- libgm/client.go | 4 ++-- libgm/rpc.go | 22 ++++++++++++++++------ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/libgm/client.go b/libgm/client.go index 98d6c68..304863e 100644 --- a/libgm/client.go +++ b/libgm/client.go @@ -116,7 +116,7 @@ func (c *Client) Connect() error { return fmt.Errorf("failed to get web encryption key: %w", err) } c.updateWebEncryptionKey(webEncryptionKeyResponse.GetKey()) - go c.rpc.ListenReceiveMessages() + go c.rpc.ListenReceiveMessages(true) c.sessionHandler.startAckInterval() bugleRes, bugleErr := c.IsBugleDefault() @@ -137,7 +137,7 @@ func (c *Client) StartLogin() (string, error) { return "", err } c.AuthData.TachyonAuthToken = registered.AuthKeyData.TachyonAuthToken - go c.rpc.ListenReceiveMessages() + go c.rpc.ListenReceiveMessages(false) qr, err := c.GenerateQRCodeData(registered.GetPairingKey()) if err != nil { return "", fmt.Errorf("failed to generate QR code: %w", err) diff --git a/libgm/rpc.go b/libgm/rpc.go index 5321aa7..4cd1cc2 100644 --- a/libgm/rpc.go +++ b/libgm/rpc.go @@ -34,7 +34,7 @@ type RPC struct { recentUpdatesPtr int } -func (r *RPC) ListenReceiveMessages() { +func (r *RPC) ListenReceiveMessages(loggedIn bool) { r.listenID++ listenID := r.listenID errored := true @@ -43,7 +43,9 @@ func (r *RPC) ListenReceiveMessages() { err := r.client.refreshAuthToken() if err != nil { r.client.Logger.Err(err).Msg("Error refreshing auth token") - r.client.triggerEvent(&events.ListenFatalError{Error: fmt.Errorf("failed to refresh auth token: %w", err)}) + if loggedIn { + r.client.triggerEvent(&events.ListenFatalError{Error: fmt.Errorf("failed to refresh auth token: %w", err)}) + } return } r.client.Logger.Debug().Msg("Starting new long-polling request") @@ -67,7 +69,9 @@ func (r *RPC) ListenReceiveMessages() { util.BuildRelayHeaders(req, "application/json+protobuf", "*/*") resp, reqErr := r.http.Do(req) if reqErr != nil { - r.client.triggerEvent(&events.ListenTemporaryError{Error: reqErr}) + if loggedIn { + r.client.triggerEvent(&events.ListenTemporaryError{Error: reqErr}) + } errored = true r.client.Logger.Err(err).Msg("Error making listen request, retrying in 5 seconds") time.Sleep(5 * time.Second) @@ -75,10 +79,14 @@ func (r *RPC) ListenReceiveMessages() { } if resp.StatusCode >= 400 && resp.StatusCode < 500 { r.client.Logger.Error().Int("status_code", resp.StatusCode).Msg("Error making listen request") - r.client.triggerEvent(&events.ListenFatalError{Error: events.HTTPError{Action: "polling", Resp: resp}}) + if loggedIn { + r.client.triggerEvent(&events.ListenFatalError{Error: events.HTTPError{Action: "polling", Resp: resp}}) + } return } else if resp.StatusCode >= 500 { - r.client.triggerEvent(&events.ListenTemporaryError{Error: events.HTTPError{Action: "polling", Resp: resp}}) + if loggedIn { + r.client.triggerEvent(&events.ListenTemporaryError{Error: events.HTTPError{Action: "polling", Resp: resp}}) + } errored = true r.client.Logger.Debug().Int("statusCode", resp.StatusCode).Msg("5xx error in long polling, retrying in 5 seconds") time.Sleep(5 * time.Second) @@ -86,7 +94,9 @@ func (r *RPC) ListenReceiveMessages() { } if errored { errored = false - r.client.triggerEvent(&events.ListenRecovered{}) + if loggedIn { + r.client.triggerEvent(&events.ListenRecovered{}) + } } r.client.Logger.Debug().Int("statusCode", resp.StatusCode).Msg("Long polling opened") r.conn = resp.Body