backport of commit 9c8a7422ade1b46f413274c5eb6d5306c9e3e563 (#21665)

Co-authored-by: Angel Garbarino <Monkeychip@users.noreply.github.com>
This commit is contained in:
hc-github-team-secure-vault-core 2023-07-07 14:01:33 -04:00 committed by GitHub
parent 93d2fc099f
commit ec7e69adc0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 1 deletions

3
changelog/21503.txt Normal file
View File

@ -0,0 +1,3 @@
```release-note:bug
ui: Surface DOMException error when browser settings prevent localStorage.
```

View File

@ -4,8 +4,22 @@
*/ */
export default { export default {
isLocalStorageSupported() {
try {
const key = `__storage__test`;
window.localStorage.setItem(key, null);
window.localStorage.removeItem(key);
return true;
} catch (e) {
// modify the e object so we can customize the error message.
// e.message is readOnly.
e.errors = [`This is likely due to your browser's cookie settings.`];
throw e;
}
},
getItem(key) { getItem(key) {
var item = window.localStorage.getItem(key); const item = window.localStorage.getItem(key);
return item && JSON.parse(item); return item && JSON.parse(item);
}, },

View File

@ -10,6 +10,7 @@ import Route from '@ember/routing/route';
import { task, timeout } from 'ember-concurrency'; import { task, timeout } from 'ember-concurrency';
import Ember from 'ember'; import Ember from 'ember';
import getStorage from '../../lib/token-storage'; import getStorage from '../../lib/token-storage';
import localStorage from 'vault/lib/local-storage';
import ClusterRoute from 'vault/mixins/cluster-route'; import ClusterRoute from 'vault/mixins/cluster-route';
import ModelBoundaryRoute from 'vault/mixins/model-boundary-route'; import ModelBoundaryRoute from 'vault/mixins/model-boundary-route';
@ -87,6 +88,9 @@ export default Route.extend(ModelBoundaryRoute, ClusterRoute, {
}, },
model(params) { model(params) {
// if a user's browser settings block localStorage they will be unable to use Vault. The method will throw the error and the rest of the application will not load.
localStorage.isLocalStorageSupported();
const id = this.getClusterId(params); const id = this.getClusterId(params);
return this.store.findRecord('cluster', id); return this.store.findRecord('cluster', id);
}, },