diff --git a/app/src/App.vue b/app/src/App.vue
index b3809363..007ed45e 100644
--- a/app/src/App.vue
+++ b/app/src/App.vue
@@ -112,13 +112,7 @@ export default {
// This hook is only triggered at page first load
created () {
- // From this hook the value of `connected` always come from the localStorage.
- // This state may be `true` but session may have expired, by querying
- // yunohost infos, api may respond with `Unauthorized` in which case the `connected`
- // state will be automaticly reseted and user will be prompt with the login view.
- if (this.connected) {
- this.$store.dispatch('GET_YUNOHOST_INFOS')
- }
+ this.$store.dispatch('ON_APP_CREATED')
},
mounted () {
diff --git a/app/src/router/index.js b/app/src/router/index.js
index 163ffd96..21deb68f 100644
--- a/app/src/router/index.js
+++ b/app/src/router/index.js
@@ -35,6 +35,10 @@ router.beforeEach((to, from, next) => {
if (store.getters.error) {
store.dispatch('DISMISS_ERROR', true)
}
+
+ if (to.name === 'post-install' && store.getters.installed) {
+ return next('/')
+ }
// Allow if connected or route is not protected
if (store.getters.connected || to.meta.noAuth) {
next()
diff --git a/app/src/store/info.js b/app/src/store/info.js
index a34db1a2..dfcd3d20 100644
--- a/app/src/store/info.js
+++ b/app/src/store/info.js
@@ -7,6 +7,7 @@ import { timeout, isEmptyValue, isObjectLiteral } from '@/helpers/commons'
export default {
state: {
host: window.location.host, // String
+ installed: null,
connected: localStorage.getItem('connected') === 'true', // Boolean
yunohost: null, // Object { version, repo }
waiting: false, // Boolean
@@ -22,6 +23,10 @@ export default {
},
mutations: {
+ 'SET_INSTALLED' (state, boolean) {
+ state.installed = boolean
+ },
+
'SET_CONNECTED' (state, boolean) {
localStorage.setItem('connected', boolean)
state.connected = boolean
@@ -106,23 +111,37 @@ export default {
},
actions: {
- 'CHECK_INSTALL' ({ dispatch }, retry = 2) {
+ async 'ON_APP_CREATED' ({ dispatch, state }) {
+ await dispatch('CHECK_INSTALL')
+
+ if (!state.installed) {
+ router.push({ name: 'post-install' })
+ } else {
+ dispatch('CONNECT')
+ }
+ },
+
+ async 'CHECK_INSTALL' ({ dispatch, commit }, retry = 2) {
// this action will try to query the `/installed` route 3 times every 5 s with
// a timeout of the same delay.
// FIXME need testing with api not responding
- return timeout(api.get('installed'), 5000).then(({ installed }) => {
+ try {
+ const { installed } = await timeout(api.get('installed'), 5000)
+ commit('SET_INSTALLED', installed)
return installed
- }).catch(err => {
+ } catch (err) {
if (retry > 0) {
return dispatch('CHECK_INSTALL', --retry)
}
throw err
- })
+ }
},
- 'CONNECT' ({ commit, dispatch }) {
+ async 'CONNECT' ({ commit, dispatch }) {
+ // If the user is not connected, the first action will throw
+ // and login prompt will be shown automaticly
+ await dispatch('GET_YUNOHOST_INFOS')
commit('SET_CONNECTED', true)
- dispatch('GET_YUNOHOST_INFOS')
},
'RESET_CONNECTED' ({ commit }) {
@@ -350,6 +369,7 @@ export default {
getters: {
host: state => state.host,
+ installed: state => state.installed,
connected: state => state.connected,
yunohost: state => state.yunohost,
error: state => state.error,
diff --git a/app/src/views/Login.vue b/app/src/views/Login.vue
index f7fdf8db..b5d31f14 100644
--- a/app/src/views/Login.vue
+++ b/app/src/views/Login.vue
@@ -13,7 +13,7 @@