branch bow-v2-go updated (16e7009 -> 609b45c)
This is an automated email from the git hooks/post-receive script. New change to branch bow-v2-go in repository bow. See https://gitlab.nuiton.org/chorem/bow.git from 16e7009 opensearch avec bow-token car les cookies ne sont pas envoyes debut page preference (bookmarklet add) correction suppression cookie au logout (probleme dans le header logout/login :() new 609b45c meilleur support du login/logout ajout de la notion de listener sur le change dans le store The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 609b45cde821db107231c5eb3f6f9926a6315584 Author: Benjamin <poussin@codelutin.com> Date: Fri Apr 24 11:06:28 2020 +0200 meilleur support du login/logout ajout de la notion de listener sur le change dans le store Summary of changes: web/src/App.vue | 8 +++++++- web/src/components/layout/Header.vue | 16 ++++++++++++---- web/src/router/index.js | 25 ++++++++++++++++++++++++- web/src/utils/Store.js | 21 +++++++++++++++++++++ web/src/views/Login.vue | 10 +++++++--- 5 files changed, 71 insertions(+), 9 deletions(-) -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch bow-v2-go in repository bow. See https://gitlab.nuiton.org/chorem/bow.git commit 609b45cde821db107231c5eb3f6f9926a6315584 Author: Benjamin <poussin@codelutin.com> Date: Fri Apr 24 11:06:28 2020 +0200 meilleur support du login/logout ajout de la notion de listener sur le change dans le store --- web/src/App.vue | 8 +++++++- web/src/components/layout/Header.vue | 16 ++++++++++++---- web/src/router/index.js | 25 ++++++++++++++++++++++++- web/src/utils/Store.js | 21 +++++++++++++++++++++ web/src/views/Login.vue | 10 +++++++--- 5 files changed, 71 insertions(+), 9 deletions(-) diff --git a/web/src/App.vue b/web/src/App.vue index 5d209a4..c31b580 100644 --- a/web/src/App.vue +++ b/web/src/App.vue @@ -23,11 +23,16 @@ import Sidebar from './components/layout/Sidebar.vue' }) class App extends Vue { insertOpenSearch() { + let linkId = 'opensearch' + // on retire l'ancien quoi qu'il arrive + let old = document.getElementById(linkId) + old && old.remove() + let token = this.$store.getCookie('bow-token') if (token) { // <link title="bow" type="application/opensearchdescription+xml" rel="search" href="<%= VUE_APP_BOW_PUBLIC_API_URL %>/api/v1/opensearch"> let link = document.createElement('link') - link.id = 'opensearch' + link.id = linkId link.title = 'bow' link.type = 'application/opensearchdescription+xml' link.rel = 'search' @@ -39,6 +44,7 @@ class App extends Vue { beforeMount() { console.log('beforeMounted App') this.insertOpenSearch() + this.$store.addListener('bow-user', this.insertOpenSearch, this) } } export default App diff --git a/web/src/components/layout/Header.vue b/web/src/components/layout/Header.vue index 1f1fb89..5598a51 100644 --- a/web/src/components/layout/Header.vue +++ b/web/src/components/layout/Header.vue @@ -7,7 +7,7 @@ <SearchInput></SearchInput> <div id="header-user-infos"> - <span v-if="token"> + <span v-if="authenticated" v-on:authenticated="loadData()"> <router-link to="/preferences"> {{ this.user.login }} (bow user since {{ new Date(this.user.creationdate).getFullYear() }}) </router-link> @@ -35,18 +35,26 @@ import SearchInput from '@/components/SearchInput' }) class Header extends Vue { user = {} - token = '' + authenticated = false logout() { this.$fetch .delete(`/users/${this.user.id}/auth`) + .then(() => this.loadData()) + .then(() => this.$store.delete('bow-user')) .then(() => this.$router.push({ name: 'Login' })) } + loadData() { + console.log('loadData Header') + this.user = this.$store.get('bow-user') + this.authenticated = !!this.$store.getCookie('bow-token') + } + beforeMount() { console.log('beforeMounted Header') - this.user = this.$store.get('bow-user') - this.token = this.$store.getCookie('bow-token') + this.loadData() + this.$store.addListener('bow-user', this.loadData, this) } // beforeUpdate() { diff --git a/web/src/router/index.js b/web/src/router/index.js index 90152d6..437a8e0 100644 --- a/web/src/router/index.js +++ b/web/src/router/index.js @@ -16,12 +16,18 @@ const routes = [ { path: '/preferences', name: 'Preferences', - component: Preferences + component: Preferences, + meta: { + requiresAuth: true + } }, { path: '/', name: 'Home', component: Home, + meta: { + requiresAuth: true + }, props: route => ({ id: route.query.id, tags: route.query.tags, @@ -36,6 +42,9 @@ const routes = [ path: '/edit/:id', name: 'Edit', component: BookmarkEdit, + meta: { + requiresAuth: true + }, props: route => ({ id: route.params.id, uri: route.query.uri, @@ -63,4 +72,18 @@ const router = new VueRouter({ routes }) +router.beforeEach((to, from, next) => { + if ( + to.matched.some(record => record.meta.requiresAuth) && + !window.$store.getCookie('bow-token') + ) { + next({ + path: '/login', + params: { nextUrl: to.fullPath } + }) + } else { + next() + } +}) + export default router diff --git a/web/src/utils/Store.js b/web/src/utils/Store.js index ee3ea5d..88e2286 100644 --- a/web/src/utils/Store.js +++ b/web/src/utils/Store.js @@ -1,8 +1,19 @@ +// contient des pairs {key, callback} +let listeners = [] + +function fireEvent(key, value) { + console.log('-------------> storage change', key, value) + listeners.filter(l => l.key === key).forEach(l => { + l.callback.call(l.me, value, key) + }) +} + /* Default store/read to/from localStorage If data not found on localStorage, looking for value in cookie */ let StoreHelper = { + get(key) { let value = localStorage.getItem(key) || this.getCookie(key) return value === undefined ? undefined : JSON.parse(value) @@ -11,10 +22,12 @@ let StoreHelper = { set(key, value) { // value must not be undefined (error when JSON.parse during get) localStorage.setItem(key, JSON.stringify(value || null)) + fireEvent(key, value) }, delete(key) { localStorage.removeItem(key) + fireEvent(key, undefined) }, has(key) { @@ -38,6 +51,14 @@ let StoreHelper = { .map(s => decodeURIComponent(s.replace(/[^=]+=(.*)/, '$1')))[0] return value + }, + + addListener(key, callback, me) { + listeners.push({key, callback, me}) + }, + + removeEventListener(key, callback) { + listeners = listeners.filter(e => e.key !== key && e.callback !== callback) } } diff --git a/web/src/views/Login.vue b/web/src/views/Login.vue index df2e7ff..acac899 100644 --- a/web/src/views/Login.vue +++ b/web/src/views/Login.vue @@ -49,9 +49,13 @@ class Login extends Vue { this.$fetch.post('/users/auth', this.data).then( user => { console.log('ok', user) - this.$store.set('user', user) - this.$emit('authenticated', user) - this.$router.push({ name: 'Home'}) + this.$store.set('bow-user', user) + + if(this.$route.params.nextUrl != null){ + this.$router.push(this.$route.params.nextUrl) + } else { + this.$router.push({ name: 'Home'}) + } }, err => { console.log('ko', err) -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
participants (1)
-
chorem.org scm