import axios from 'axios' import router from '@/router' import url from '@/plugins/routes' const state = { user: { username: null, accessToken: null, group: null }, loggingIn: false, loginError: null } const mutations = { loginStart: state => (state.loggingIn = true), loginStop(state, errorMessage) { state.loggingIn = false state.loginError = errorMessage }, updateAccessToken(state, data) { if (typeof data === typeof '') { data = JSON.parse(data) } if (data === null || data === undefined) { state.user.username = null state.user.accessToken = null state.user.group = null } else { state.user.username = data.username state.user.accessToken = data.accessToken state.user.group = data.group } }, logout(state) { state.user.accessToken = null state.user.username = null state.user.group = null } } const actions = { async doLogin({ commit }, loginData) { commit('loginStart') try { const response = await axios.post(url.login, { ...loginData }) localStorage.setItem( 'user', JSON.stringify({ username: response.data.username, accessToken: response.data.token, group: response.data.group }) ) commit('loginStop', null) commit('updateAccessToken', response.data) if (state.user.group.includes('moneymaster')) { router.push('/main/finanzer') } else if (state.user.group.includes('bar')) { router.push('/main/bar/geruecht') } else if (state.user.group.includes('user')) { router.push('/main/user/add') } } catch (err) { commit('loginStop', err.response.data.error) commit('updateAccessToken', { username: null, accessToken: null, group: null }) } }, fetchAccessToken({ commit }) { commit('updateAccessToken', localStorage.getItem('user')) }, logout({ commit }) { localStorage.removeItem('user') commit('logout') router.push('/login') }, resetLoginError({ commit }) { commit('loginStop') } } const getters = { getGroup: state => { return state.user.group }, group: state => { return state.user.group }, getToken: state => { return state.user.accessToken }, token: state => { return state.user.accessToken }, loginError: state => { return state.loginError }, isBar: state => { try { return state.user.group.includes('bar') ? true : false } catch (e) { return false } }, isFinanzer: state => { try { return state.user.group.includes('moneymaster') ? true : false } catch (e) { return false } }, isUser: state => { try { return state.user.group.includes('user') ? true : false } catch (e) { return false } }, isLoggedIn: state => { return state.user.accessToken ? true : false } } export default { state, mutations, actions, getters }