From c9c1567e80455409d8245a4c2392bca21109fc25 Mon Sep 17 00:00:00 2001 From: Ryan Tharp Date: Wed, 11 Dec 2019 23:25:43 -0800 Subject: [PATCH] fix token refresh, log error when failing to send a message --- js/modules/loki_app_dot_net_api.js | 45 +++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/js/modules/loki_app_dot_net_api.js b/js/modules/loki_app_dot_net_api.js index 747986c82..97aa8b13d 100644 --- a/js/modules/loki_app_dot_net_api.js +++ b/js/modules/loki_app_dot_net_api.js @@ -194,6 +194,24 @@ class LokiAppDotNetServerAPI { this.setProfileName(profileName); } } + if (tokenRes.err) { + log.error(`token err`, tokenRes); + // didn't already try && this specific error + if ( + !forceRefresh && + tokenRes.response && + tokenRes.response.meta && + tokenRes.response.meta.code === 401 + ) { + // this token is not good + this.token = ''; // remove from object + await Signal.Data.savePublicServerToken({ + serverUrl: this.baseServerUrl, + token: '', + }); + token = this.getOrRefreshServerToken(true); + } + } return token; } @@ -287,18 +305,15 @@ class LokiAppDotNetServerAPI { url.search = new URLSearchParams(params); } let result; - const token = await this.getOrRefreshServerToken(); - if (!token) { - log.error('NO TOKEN'); - return { - err: 'noToken', - }; - } try { const fetchOptions = {}; - const headers = { - Authorization: `Bearer ${this.token}`, - }; + const headers = {}; + if (forceFreshToken) { + await this.getOrRefreshServerToken(true); + } + if (this.token) { + headers.Authorization = `Bearer ${this.token}`; + } if (method) { fetchOptions.method = method; } @@ -1538,6 +1553,16 @@ class LokiPublicChannelAPI { window.mixpanel.track('Public Message Sent'); return res.response.data.id; } + if (res.err) { + log.error(`POST ${this.baseChannelUrl}/messages failed`); + if (res.response && res.response.meta && res.response.meta.code === 401) { + log.error(`Got invalid token for ${this.serverAPI.token}`); + } + log.error(res.err); + log.error(res.response); + } else { + log.warn(res.response); + } // there's no retry on desktop // this is supposed to be after retries window.mixpanel.track('Failed to Send Public Message');