import { UserService, AuthenticationError, ApiService, TokenService } from '@/services' import router from '@/router' import { urls } from '@/config/urls' export default { async login({ commit, dispatch }, {cell_number, password}) { commit('loginRequest'); try { const response = await UserService.login(cell_number, password); commit('loginSuccess', response.data.access_token); // Redirect the user to the page he first tried to visit or to the home view router.push(router.history.current.query.redirect || '/'); dispatch('info', {}, {root : true}); return response; } catch (e) { if (e instanceof AuthenticationError) { commit('loginError', {errorCode: e.errorCode, errorMessage: e.message}) } return false } }, async forgotPassword({commit}, {form}) { var result = await ApiService.post(urls.forgotPassword, form); if(result && result.status == 200) { commit('modal/changeCurrentModal', { modal: "modal-auth-verify-code" }, {root: true}); } }, async verifyCodeSMS({commit, dispatch}, {form}) { var response = await ApiService.post(urls.sendVerifyCode, form); if(response && response.status == 200 && response.data.access_token) { TokenService.saveToken(response.data.access_token); TokenService.saveRefreshToken(response.data.refresh_token); ApiService.setAuthHeader(); commit('loginSuccess', response.data.access_token); commit('modal/changeCurrentModal', { modal: "modal-auth-change-password" }, {root: true}); dispatch('info', {}, {root : true}); } }, async changePassword({commit}, {form}) { var response = await ApiService.post(urls.changePassword, form); if(response && response.status == 200 ) { commit('modal/closeModal', {}, {root: true}); router.push({ name: `Dashboard` }); } }, async logout({ commit }) { await UserService.logout(); commit('logoutSuccess') router.push('/login') }, refreshToken({ commit, state }) { // If this is the first time the refreshToken has been called, make a request // otherwise return the same promise to the caller if(!state.refreshTokenPromise) { const p = UserService.refreshToken() commit('refreshTokenPromise', p) // Wait for the UserService.refreshToken() to resolve. On success set the token and clear promise // Clear the promise on error as well. p.then( response => { commit('refreshTokenPromise', null) commit('loginSuccess', response) }, error => { commit('refreshTokenPromise', null) } ) } return state.refreshTokenPromise } }