From 3bb31e3cb436511682f34a63f677fb966a7f29ea Mon Sep 17 00:00:00 2001
From: Sonia Zorba <sonia.zorba@inaf.it>
Date: Tue, 15 Dec 2020 17:35:28 +0100
Subject: [PATCH] Displayed user info in UI

---
 vospace-ui-frontend/src/App.vue               |  1 +
 .../src/api/mock/data/user.json               |  3 +++
 vospace-ui-frontend/src/api/mock/index.js     |  5 +++++
 vospace-ui-frontend/src/api/server/index.js   | 22 +++++++++++++++++++
 .../src/components/TopMenu.vue                |  9 ++++++++
 vospace-ui-frontend/src/store.js              | 10 ++++++++-
 6 files changed, 49 insertions(+), 1 deletion(-)
 create mode 100644 vospace-ui-frontend/src/api/mock/data/user.json

diff --git a/vospace-ui-frontend/src/App.vue b/vospace-ui-frontend/src/App.vue
index 4081bff..79f9a9f 100644
--- a/vospace-ui-frontend/src/App.vue
+++ b/vospace-ui-frontend/src/App.vue
@@ -31,6 +31,7 @@ export default {
   },
   mounted() {
     this.$store.dispatch('loadJobs');
+    this.$store.dispatch('loadUserInfo');
   }
 }
 </script>
diff --git a/vospace-ui-frontend/src/api/mock/data/user.json b/vospace-ui-frontend/src/api/mock/data/user.json
new file mode 100644
index 0000000..7a8e8c5
--- /dev/null
+++ b/vospace-ui-frontend/src/api/mock/data/user.json
@@ -0,0 +1,3 @@
+{
+  "username": "anonymous"
+}
diff --git a/vospace-ui-frontend/src/api/mock/index.js b/vospace-ui-frontend/src/api/mock/index.js
index ed27af4..7f03175 100644
--- a/vospace-ui-frontend/src/api/mock/index.js
+++ b/vospace-ui-frontend/src/api/mock/index.js
@@ -3,6 +3,8 @@ import folder1 from 'raw-loader!./data/nodes/folder1.html';
 import folder2 from 'raw-loader!./data/nodes/folder2.html';
 import job from './data/job';
 import jobs from './data/jobs';
+import user from './data/user';
+
 import store from '../../store';
 
 const fetch = (mockData, showLoading = true, time = 500) => {
@@ -40,5 +42,8 @@ export default {
   },
   loadJobs() {
     return fetch(jobs, false);
+  },
+  getUserInfo() {
+    return fetch(user, false);
   }
 }
diff --git a/vospace-ui-frontend/src/api/server/index.js b/vospace-ui-frontend/src/api/server/index.js
index 6162815..0c5e4a9 100644
--- a/vospace-ui-frontend/src/api/server/index.js
+++ b/vospace-ui-frontend/src/api/server/index.js
@@ -50,5 +50,27 @@ export default {
         'Cache-Control': 'no-cache'
       }
     }, true, true);
+  },
+  loadJobs() {
+    let url = BASE_API_URL + 'jobs';
+    return apiRequest({
+      method: 'GET',
+      url: url,
+      withCredentials: true,
+      headers: {
+        'Cache-Control': 'no-cache'
+      }
+    }, false, true);
+  },
+  getUserInfo() {
+    let url = BASE_API_URL + 'user';
+    return apiRequest({
+      method: 'GET',
+      url: url,
+      withCredentials: true,
+      headers: {
+        'Cache-Control': 'no-cache'
+      }
+    }, false, false);
   }
 }
diff --git a/vospace-ui-frontend/src/components/TopMenu.vue b/vospace-ui-frontend/src/components/TopMenu.vue
index 813bddf..707c7e7 100644
--- a/vospace-ui-frontend/src/components/TopMenu.vue
+++ b/vospace-ui-frontend/src/components/TopMenu.vue
@@ -3,6 +3,12 @@
   <b-navbar toggleable="lg" type="dark" id="top-menu">
     <b-navbar-brand href="#/" class="d-none d-md-block">VOSpace</b-navbar-brand>
     <JobsMenuItem />
+    <b-navbar-nav class="ml-auto">
+      <b-nav-item href="login" target="blank_" class="mr-4" v-if="user === 'anonymous'">Login</b-nav-item>
+      <b-nav-item-dropdown :text="user" right v-if="user !== 'anonymous'">
+        <b-dropdown-item href="vospace-logout">Logout</b-dropdown-item>
+      </b-nav-item-dropdown>
+    </b-navbar-nav>
   </b-navbar>
 </div>
 </template>
@@ -13,6 +19,9 @@ import JobsMenuItem from './JobsMenuItem.vue';
 export default {
   components: {
     JobsMenuItem
+  },
+  computed: {
+    user() { return this.$store.state.user }
   }
 }
 </script>
diff --git a/vospace-ui-frontend/src/store.js b/vospace-ui-frontend/src/store.js
index 14255d7..af99d79 100644
--- a/vospace-ui-frontend/src/store.js
+++ b/vospace-ui-frontend/src/store.js
@@ -12,7 +12,8 @@ export default new Vuex.Store({
     path: '',
     loading: true,
     tapeButtonEnabled: false,
-    jobs: []
+    jobs: [],
+    user: 'anonymous'
   },
   mutations: {
     setLoading(state, loading) {
@@ -37,6 +38,9 @@ export default new Vuex.Store({
     },
     addJob(state, job) {
       state.jobs.push(job);
+    },
+    setUsername(state, username) {
+      state.user = username;
     }
   },
   actions: {
@@ -72,6 +76,10 @@ export default new Vuex.Store({
     loadJobs({ commit }) {
       client.loadJobs()
         .then(jobs => commit('setJobs', jobs));
+    },
+    loadUserInfo({ commit }) {
+      client.getUserInfo()
+        .then(res => commit('setUsername', res.username));
     }
   }
 });
-- 
GitLab