From 33a405ae8f89b23802bd0212adb7a76ed6dfafa3 Mon Sep 17 00:00:00 2001 From: John Cowen Date: Wed, 1 Dec 2021 13:24:52 +0000 Subject: [PATCH] ui: Don't cache event sources following a 401 (#11681) --- .changelog/11681.txt | 4 ++++ .../app/services/data-source/service.js | 20 ++++++++++++------- .../app/utils/dom/event-source/callable.js | 2 +- 3 files changed, 18 insertions(+), 8 deletions(-) create mode 100644 .changelog/11681.txt diff --git a/.changelog/11681.txt b/.changelog/11681.txt new file mode 100644 index 000000000..4d7c7cbae --- /dev/null +++ b/.changelog/11681.txt @@ -0,0 +1,4 @@ +```release-note:bug +ui: Fixes an issue where under some circumstances after logging we present the +data loaded previous to you logging in. +``` diff --git a/ui/packages/consul-ui/app/services/data-source/service.js b/ui/packages/consul-ui/app/services/data-source/service.js index d37b60b65..0d4612557 100644 --- a/ui/packages/consul-ui/app/services/data-source/service.js +++ b/ui/packages/consul-ui/app/services/data-source/service.js @@ -96,13 +96,15 @@ export default class DataSourceService extends Service { if (!(uri instanceof URI) && typeof uri !== 'string') { return this.unwrap(uri, ref); } - runInDebug( - _ => { - if(!(uri instanceof URI)) { - console.error(new Error(`DataSource '${uri}' does not use the uri helper. Please ensure you use the uri helper to ensure correct encoding`)) - } + runInDebug(_ => { + if (!(uri instanceof URI)) { + console.error( + new Error( + `DataSource '${uri}' does not use the uri helper. Please ensure you use the uri helper to ensure correct encoding` + ) + ); } - ); + }); uri = uri.toString(); let source; // Check the cache for an EventSource that is already being used @@ -130,7 +132,11 @@ export default class DataSourceService extends Service { const event = source.getCurrentEvent(); const cursor = source.configuration.cursor; // only cache data if we have any - if (typeof event !== 'undefined' && typeof cursor !== 'undefined') { + if ( + typeof event !== 'undefined' && + typeof cursor !== 'undefined' && + e.errors && e.errors[0].status !== '401' + ) { cache.set(uri, { currentEvent: event, cursor: cursor, diff --git a/ui/packages/consul-ui/app/utils/dom/event-source/callable.js b/ui/packages/consul-ui/app/utils/dom/event-source/callable.js index f8b232586..86e8af079 100644 --- a/ui/packages/consul-ui/app/utils/dom/event-source/callable.js +++ b/ui/packages/consul-ui/app/utils/dom/event-source/callable.js @@ -57,7 +57,7 @@ export default function( // close after the dispatch so we can tell if it was an error whilst closed or not // but make sure its before the promise tick this.readyState = 2; // CLOSE - this.dispatchEvent({ type: 'close' }); + this.dispatchEvent({ type: 'close', error: e }); }) .then(() => { // This only gets called when the promise chain completely finishes