From 5f9a66e421aca601ae518a0a58d221bc5501876f Mon Sep 17 00:00:00 2001 From: Zhihe Li Date: Tue, 23 Jan 2024 16:31:21 -0500 Subject: [PATCH] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Handle=20when=20requests?= =?UTF-8?q?=20to=20client=20daemon=20are=20returning=20403=20(#2105)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../addon/handlers/client-daemon-handler.js | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/addons/api/addon/handlers/client-daemon-handler.js b/addons/api/addon/handlers/client-daemon-handler.js index 237a8270d..573bc42ba 100644 --- a/addons/api/addon/handlers/client-daemon-handler.js +++ b/addons/api/addon/handlers/client-daemon-handler.js @@ -104,7 +104,8 @@ export default class ClientDaemonHandler { filters, }); } - const auth_token_id = this.session.data?.authenticated?.id; + const sessionData = this.session.data?.authenticated; + const auth_token_id = sessionData?.id; remainingQuery = { ...remainingQuery, query: searchQuery, @@ -119,6 +120,23 @@ export default class ClientDaemonHandler { remainingQuery, ); } catch (e) { + // If we got a 403, most likely the client daemon was restarted and our token is no longer valid + // I'm not sure if we can get a 401 since we always send a token but we'll handle it in the same way + if (e.statusCode === 403 || e.statusCode === 401) { + await this.ipc.invoke('addTokenToClientDaemon', { + tokenId: auth_token_id, + token: sessionData?.token, + }); + try { + clientDaemonResults = await this.ipc.invoke( + 'searchClientDaemon', + remainingQuery, + ); + } catch { + // If it fails again just fall back to fetching controller data + } + } + return fetchControllerData(context, next); }