diff --git a/new/commons/fetch.js b/new/commons/fetch.js index 01cc8ed9..d5152abe 100644 --- a/new/commons/fetch.js +++ b/new/commons/fetch.js @@ -1,4 +1,4 @@ -import { getCookie, setCookie } from './local-storage'; +import { getCookie, setCookie, removeCookie } from './local-storage'; import { ENV } from '../../env'; let spinnerCount = 0; @@ -42,12 +42,18 @@ export const egeriaFetch = (url, headers) => { ) .then((response) => { if(response.status === 403 && !['/login'].includes(window.location.pathname)) { + removeCookie('token'); setCookie('token', ''); - window.location.href='/login'; + window.location.href = '/login'; } - return response.json(); + return response.text(); + }) + .then(data => { + // adding this temporarily because /logout retrieves no content and + // response.json() fails to parse empty content as JSON + return data ? JSON.parse(data) : {}; }) .finally(() => { spinner(false); diff --git a/new/commons/local-storage.js b/new/commons/local-storage.js index fc572af5..bbde1b2b 100644 --- a/new/commons/local-storage.js +++ b/new/commons/local-storage.js @@ -4,4 +4,8 @@ export const setCookie = (name, value) => { export const getCookie = (name) => { return window.localStorage.getItem(name); +}; + +export const removeCookie = (name) => { + localStorage.removeItem(name); }; \ No newline at end of file diff --git a/new/egeria-app.container.js b/new/egeria-app.container.js index 32c636ea..65034f9c 100644 --- a/new/egeria-app.container.js +++ b/new/egeria-app.container.js @@ -29,28 +29,9 @@ import { getCookie } from './commons/local-storage'; import { egeriaFetch } from './commons/fetch'; class EgeriaApp extends PolymerElement { - static get properties() { - return { - components: { type: Array, value: [] }, - currentUser: { type: Object, value: {} }, - appInfo: { type: Object, value: {} }, - roles: { type: Array, value: [] }, - - isLoading: { type: Boolean, value: true }, - isLoggedIn: { type: Boolean, value: false }, - - queryParams: {}, - routeData: {}, - tail: {}, - - route: { type: Object }, - pages: { type: Array, value: [''], observer: '_pagesChanged' }, - page: { type: String, value: '' } - }; - } + constructor() { + super(); - ready() { - super.ready(); this.isLoading = true; Promise.all([ @@ -72,6 +53,26 @@ class EgeriaApp extends PolymerElement { }); } + static get properties() { + return { + components: { type: Array, value: [] }, + currentUser: { type: Object, value: {} }, + appInfo: { type: Object, value: {} }, + roles: { type: Array, value: [] }, + + isLoading: { type: Boolean, value: true }, + isLoggedIn: { type: Boolean, value: false }, + + queryParams: {}, + routeData: {}, + tail: {}, + + route: { type: Object }, + pages: { type: Array, value: [''], observer: '_pagesChanged' }, + page: { type: String, value: '' } + }; + } + static get observers() { return [ '_routeCycle(route, components, currentUser)' @@ -147,7 +148,7 @@ class EgeriaApp extends PolymerElement { if(this.canAccess(route, components)) { this.pages = route.split('/'); } else { - this.pages = ['forbidden']; + this.pages = !getCookie('token') ? ['empty'] : ['forbidden']; } } break; diff --git a/new/egeria-user-options.component.js b/new/egeria-user-options.component.js index 27e944be..01675777 100644 --- a/new/egeria-user-options.component.js +++ b/new/egeria-user-options.component.js @@ -13,7 +13,7 @@ import '@vaadin/vaadin-grid/vaadin-grid-sort-column.js'; import { PolymerElement, html } from '@polymer/polymer/polymer-element.js'; -import { setCookie } from '../new/commons/local-storage'; +import { setCookie, removeCookie } from '../new/commons/local-storage'; import { egeriaFetch } from './commons/fetch'; class EgeriaUserOptions extends PolymerElement { @@ -29,7 +29,8 @@ class EgeriaUserOptions extends PolymerElement { _logout() { egeriaFetch(`/api/logout`) .then(() => { - setCookie('token', null); + removeCookie('token'); + setCookie('token', ''); }); }