From 12bdfbdf478d6c8d1ad573d0b4f65a38452462db Mon Sep 17 00:00:00 2001 From: Michael Lange Date: Tue, 28 Aug 2018 10:05:15 -0700 Subject: [PATCH 1/2] Switch token storage to localStorage from sessionStorage --- ui/app/services/token.js | 6 +++--- ui/tests/acceptance/token-test.js | 8 ++++---- ui/tests/helpers/module-for-acceptance.js | 5 +---- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/ui/app/services/token.js b/ui/app/services/token.js index 28083a050..4fa249dd4 100644 --- a/ui/app/services/token.js +++ b/ui/app/services/token.js @@ -9,13 +9,13 @@ export default Service.extend({ secret: computed({ get() { - return window.sessionStorage.nomadTokenSecret; + return window.localStorage.nomadTokenSecret; }, set(key, value) { if (value == null) { - window.sessionStorage.removeItem('nomadTokenSecret'); + window.localStorage.removeItem('nomadTokenSecret'); } else { - window.sessionStorage.nomadTokenSecret = value; + window.localStorage.nomadTokenSecret = value; } return value; diff --git a/ui/tests/acceptance/token-test.js b/ui/tests/acceptance/token-test.js index 1b48a241b..86c2845ca 100644 --- a/ui/tests/acceptance/token-test.js +++ b/ui/tests/acceptance/token-test.js @@ -21,18 +21,18 @@ moduleForAcceptance('Acceptance | tokens', { }, }); -test('the token form sets the token in session storage', function(assert) { +test('the token form sets the token in local storage', function(assert) { const { secretId } = managementToken; Tokens.visit(); andThen(() => { - assert.ok(window.sessionStorage.nomadTokenSecret == null, 'No token secret set'); + assert.ok(window.localStorage.nomadTokenSecret == null, 'No token secret set'); Tokens.secret(secretId).submit(); andThen(() => { - assert.equal(window.sessionStorage.nomadTokenSecret, secretId, 'Token secret was set'); + assert.equal(window.localStorage.nomadTokenSecret, secretId, 'Token secret was set'); }); }); }); @@ -91,7 +91,7 @@ test('an error message is shown when authenticating a token fails', function(ass andThen(() => { assert.ok( - window.sessionStorage.nomadTokenSecret == null, + window.localStorage.nomadTokenSecret == null, 'Token secret is discarded on failure' ); assert.ok(Tokens.errorMessage, 'Token error message is shown'); diff --git a/ui/tests/helpers/module-for-acceptance.js b/ui/tests/helpers/module-for-acceptance.js index 05110ce6d..328e5de58 100644 --- a/ui/tests/helpers/module-for-acceptance.js +++ b/ui/tests/helpers/module-for-acceptance.js @@ -6,10 +6,7 @@ import destroyApp from '../helpers/destroy-app'; export default function(name, options = {}) { module(name, { beforeEach() { - // Clear session storage (a side effect of token storage) - window.sessionStorage.clear(); - - // Also clear local storage (a side effect of namespaces and regions) + // Also clear local storage (a side effect of namespaces, regions, and tokens) window.localStorage.clear(); this.application = startApp(); From 42a30ab694fcb5bda093d5cd5b110edbf147095e Mon Sep 17 00:00:00 2001 From: Michael Lange Date: Tue, 28 Aug 2018 10:05:36 -0700 Subject: [PATCH 2/2] Update the info message about token storage --- ui/app/templates/settings/tokens.hbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/app/templates/settings/tokens.hbs b/ui/app/templates/settings/tokens.hbs index e17b84393..3cd92bc89 100644 --- a/ui/app/templates/settings/tokens.hbs +++ b/ui/app/templates/settings/tokens.hbs @@ -8,7 +8,7 @@

Token Storage

-

To protect Secret IDs, tokens are stored client-side in session storage. Your ACL token is automatically cleared from storage upon closing your browser window. You can also manually clear your token instead.

+

Tokens are stored client-side in local storage. This will persist your token across sessions. You can manually clear your token here.