You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by is...@apache.org on 2020/10/12 23:34:41 UTC

[airavata-custos-portal] branch ux-improvement updated: gh-37: Adding a $route listener to the header component that validates the user

This is an automated email from the ASF dual-hosted git repository.

isjarana pushed a commit to branch ux-improvement
in repository https://gitbox.apache.org/repos/asf/airavata-custos-portal.git


The following commit(s) were added to refs/heads/ux-improvement by this push:
     new 3968827  gh-37: Adding a $route listener to the header component that validates the user
     new 73b1015  Merge pull request #56 from dinukadesilva/gh-37-fix-top-header-component
3968827 is described below

commit 3968827c85a11d3a71d0c133098362e76b598b7e
Author: Dinuka De Silva <L....@gmail.com>
AuthorDate: Tue Oct 13 02:00:45 2020 +0530

    gh-37: Adding a $route listener to the header component that validates the user
---
 custos-demo-gateway/src/components/Callback.vue    | 32 +------
 custos-demo-gateway/src/components/Header.vue      | 98 +++++++++++-----------
 .../src/components/landing/Landing.vue             | 22 +----
 .../src/components/workspace/Workspace.vue         | 24 ------
 4 files changed, 51 insertions(+), 125 deletions(-)

diff --git a/custos-demo-gateway/src/components/Callback.vue b/custos-demo-gateway/src/components/Callback.vue
index ba63380..f4f3800 100644
--- a/custos-demo-gateway/src/components/Callback.vue
+++ b/custos-demo-gateway/src/components/Callback.vue
@@ -46,37 +46,9 @@
             this.custosSec = config.value('clientSec')
             this.redirectURI = config.value('redirectURI')
             this.tokenEndpoint = "https://custos.scigap.org/apiserver/identity-management/v1.0.0/token"
+
             await this.authenticate()
-            console.log("calling authenticate")
-            if (this.isAuthenticated) {
-                console.log("calling authenticated")
-                let username = await this.$store.dispatch('identity/getCurrentUserName')
-                await this.$router.push('workspace')
-                let data = {
-                    offset: 0, limit: 1, client_id: this.custosId, client_sec: this.custosSec,
-                    username: username
-                }
-                let resp = await this.$store.dispatch('user/users', data)
-                console.log(resp)
-                if (Array.isArray(resp) && resp.length > 0) {
-                    resp.forEach(user => {
-                        let dat = {
-                            client_id: this.custosId,
-                            client_sec: this.custosSec,
-                            body: {
-                                username: user.username,
-                                first_name: user.first_name,
-                                last_name: user.last_name,
-                                email: user.email,
-                            }
-                        }
-                        console.log(dat)
-                        this.$store.dispatch('user/updateUserProfile', dat)
-                    })
-                }
-            } else {
-                await this.$router.push('home')
-            }
+            await this.$router.push('workspace')
         }
     }
 </script>
diff --git a/custos-demo-gateway/src/components/Header.vue b/custos-demo-gateway/src/components/Header.vue
index 266fc30..0fe1acd 100644
--- a/custos-demo-gateway/src/components/Header.vue
+++ b/custos-demo-gateway/src/components/Header.vue
@@ -51,19 +51,14 @@
 </template>
 
 <script>
-
     import config from "@/config";
-    import store from "../store";
 
     export default {
         name: "Header",
         data: function () {
             return {
-                custosId: null,
-                custosSec: null,
                 isAdmin: false,
                 user: null,
-                currentUserName: null,
                 authenticated: false
             }
         },
@@ -72,62 +67,63 @@
                 return this.authenticated
             },
             async logout() {
-                let data = {
-                    client_id: this.custosId,
-                    client_sec: this.custosSec
-                }
-                await this.$store.dispatch('identity/logout', data)
-
-
-                // TODO fix in https://github.com/apache/airavata-custos-portal/issues/37
-                window.location.reload()
+                await this.$store.dispatch('identity/logout', {
+                    client_id: config.value('clientId'),
+                    client_sec: config.value('clientSec'),
+                })
 
-                // await this.$router.push("/")
-                // await this.$store.dispatch('agent/reset')
-                // await this.$store.dispatch('group/reset')
-                // await this.$store.dispatch('secret/reset')
-                // await this.$store.dispatch('sharing/reset')
-                // await this.$store.dispatch('user/reset')
+                await this.$router.push("/")
+                await this.$store.dispatch('agent/reset')
+                await this.$store.dispatch('group/reset')
+                await this.$store.dispatch('secret/reset')
+                await this.$store.dispatch('sharing/reset')
+                await this.$store.dispatch('user/reset')
             },
             async validateAuthentication() {
-                this.authenticated = await store.dispatch('identity/isAuthenticated', {
-                    client_id: process.env.VUE_APP_CLIENT_ID,
-                    client_sec: process.env.VUE_APP_CLIENT_SEC
+                this.authenticated = await this.$store.dispatch('identity/isAuthenticated', {
+                    client_id: config.value('clientId'),
+                    client_sec: config.value('clientSec')
                 }) === true
 
                 return this.authenticated
-            }
-        },
-
-
-        async mounted() {
-            if (await this.validateAuthentication()) {
-                this.custosId = config.value('clientId')
-                this.custosSec = config.value('clientSec')
+            },
+            async fetchAuthenticatedUser() {
                 this.isAdmin = await this.$store.dispatch('identity/isLoggedUserHasAdminAccess')
-                this.currentUserName = await this.$store.dispatch('identity/getCurrentUserName')
-
-                let resp = await this.$store.dispatch('user/users', {
-                    offset: 0,
-                    limit: 1,
-                    client_id: this.custosId,
-                    client_sec: this.custosSec,
-                    username: this.currentUserName
-                })
-                if (Array.isArray(resp) && resp.length > 0) {
-                    resp.forEach(obj => {
-                        this.user = {
-                            username: obj.username,
-                            first_name: obj.first_name,
-                            last_name: obj.last_name,
-                            email: obj.email,
-                            status: obj.state,
-                            attributes: [],
-                            roles: []
-                        }
+                let currentUserName = await this.$store.dispatch('identity/getCurrentUserName')
+
+                if (await this.validateAuthentication() && (!this.user || this.user.username !== currentUserName)) {
+                    let resp = await this.$store.dispatch('user/users', {
+                        offset: 0,
+                        limit: 1,
+                        client_id: config.value('clientId'),
+                        client_sec: config.value('clientSec'),
+                        username: currentUserName
                     })
+                    if (Array.isArray(resp) && resp.length > 0) {
+                        resp.forEach(obj => {
+                            this.user = {
+                                username: obj.username,
+                                first_name: obj.first_name,
+                                last_name: obj.last_name,
+                                email: obj.email,
+                                status: obj.state,
+                                attributes: [],
+                                roles: []
+                            }
+                        })
+                    }
                 }
             }
+        },
+        watch: {
+            $route(to, from) {
+                this.authenticated = false
+                console.log("=== route  ", [to, from])
+                this.fetchAuthenticatedUser()
+            }
+        },
+        async beforeMount() {
+            this.fetchAuthenticatedUser()
         }
     }
 </script>
diff --git a/custos-demo-gateway/src/components/landing/Landing.vue b/custos-demo-gateway/src/components/landing/Landing.vue
index 720d1ad..4a4a0b3 100644
--- a/custos-demo-gateway/src/components/landing/Landing.vue
+++ b/custos-demo-gateway/src/components/landing/Landing.vue
@@ -87,7 +87,6 @@
             }
         },
         methods: {
-
             async login() {
                 this.loginDisabled = true
                 if (this.username != null && this.username != '' && this.password != null && this.password != '') {
@@ -102,11 +101,7 @@
                     await this.$store.dispatch('identity/authenticateLocally', params)
                     let resp = await this.$store.dispatch('identity/isAuthenticated', data)
                     if (resp) {
-
-                        // TODO fix in https://github.com/apache/airavata-custos-portal/issues/37
-                        window.location.reload()
-
-                        // await this.$router.push('workspace')
+                        await this.$router.push('workspace')
                     } else {
                         this.loginError = true
                     }
@@ -115,8 +110,6 @@
                 }
                 this.loginDisabled = false
             },
-
-
             async callDismissed() {
                 this.loginError = false
             },
@@ -126,7 +119,6 @@
                 window.location.href = this.$store.getters['identity/getAuthorizationEndpoint']
             }
         },
-
         async mounted() {
             this.custosId = config.value('clientId')
             this.custosSec = config.value('clientSec')
@@ -136,20 +128,10 @@
                 client_id: this.custosId,
                 client_sec: this.custosSec
             }
-            if (await store.dispatch('identity/isAuthenticated', data) == true) {
-
+            if (await store.dispatch('identity/isAuthenticated', data) === true) {
                 await this.$router.push('workspace')
             }
-
-        },
-
-        computed: {
-            // ...mapGetters({
-            //
-            // })
         }
-
-
     }
 </script>
 
diff --git a/custos-demo-gateway/src/components/workspace/Workspace.vue b/custos-demo-gateway/src/components/workspace/Workspace.vue
index 041c98a..13d5eb1 100644
--- a/custos-demo-gateway/src/components/workspace/Workspace.vue
+++ b/custos-demo-gateway/src/components/workspace/Workspace.vue
@@ -44,8 +44,6 @@
 </template>
 
 <script>
-    import config from "@/config";
-
     export default {
         name: "Workspace",
         data: function () {
@@ -75,30 +73,8 @@
                 await this.$store.dispatch('user/reset')
             }
         },
-
         async mounted() {
-            this.custosId = config.value('clientId')
-            this.custosSec = config.value('clientSec')
             this.isAdmin = await this.$store.dispatch('identity/isLoggedUserHasAdminAccess')
-            this.currentUserName = await this.$store.dispatch('identity/getCurrentUserName')
-            let data = {
-                offset: 0, limit: 1, client_id: this.custosId, client_sec: this.custosSec,
-                username: this.currentUserName
-            }
-            let resp = await this.$store.dispatch('user/users', data)
-            if (Array.isArray(resp) && resp.length > 0) {
-                resp.forEach(obj => {
-                    this.user = {
-                        username: obj.username,
-                        first_name: obj.first_name,
-                        last_name: obj.last_name,
-                        email: obj.email,
-                        status: obj.state,
-                        attributes: [],
-                        roles: []
-                    }
-                })
-            }
         }
     }
 </script>