import axios from 'axios' import router from '@/router' import url from '@/plugins/routes' const timeout = 20000 const state = { user: { username: null, firstname: null, lastname: null, accessToken: null, group: null }, loggingIn: false, loginError: null, cookieNotification: true, cookieAccepted: false, lifeTime: 1800 } 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 state.user.firstname = data.firstname state.user.lastname = data.lastname } }, logout(state) { state.user.accessToken = null state.user.username = null state.user.group = null state.user.firstname = null state.user.lastname = null }, setCookieNotification(state, value) { state.cookieNotification = value }, setCookieAccepted(state, value) { state.cookieAccepted = value }, setLifeTime(state, value) { state.lifeTime = value } } const actions = { async doLogin({ commit, dispatch }, loginData) { commit('loginStart') try { const response = await axios.post(url.login, { ...loginData }) const cookieA = localStorage.getItem('cookie:accepted') if (!cookieA) { commit('loginStop', 'Sie müssen die Cookies akzeptieren!') commit('setCookieNotification', true) commit('setCookieAccepted', false) return } localStorage.setItem( 'user', JSON.stringify({ username: response.data.username, accessToken: response.data.token, group: response.data.group, firstname: response.data.firstname, lastname: response.data.lastname }) ) commit('loginStop', null) commit('updateAccessToken', response.data) if (state.user.group.includes('moneymaster')) { router.push('/main/finanzer/overview') } else if (state.user.group.includes('bar')) { router.push('/main/bar/geruecht') } else if (state.user.group.includes('user')) { router.push('/main/user/add') } else if (state.user.group.includes('extern')) { router.push('/main') } } catch (err) { if (err.message == 'Network Error') { dispatch('connectionError/addError', null, { root: true }) } commit('loginStop', err.response.data.error) commit('updateAccessToken', { username: null, accessToken: null, group: null, firstname: null, lastname: null }) } }, fetchAccessToken({ commit }) { commit('updateAccessToken', localStorage.getItem('user')) }, logout({ commit, rootState }) { var accessToken = rootState.login.user.accessToken localStorage.removeItem('user') localStorage.removeItem('cookie:accepted') commit('setCookieNotification', true) commit('setCookieAccepted', false) commit('logout') router.push('/login') axios.get(url.logout, { headers: { Token: accessToken } }) }, resetLoginError({ commit }) { commit('loginStop') }, acceptNotification({ commit }) { localStorage.setItem('cookie:accepted', true) commit('setCookieAccepted', true) commit('setCookieNotification', false) }, disableNotification({ commit }) { commit('setCookieNotification', false) }, getCookieAccepted({ commit }) { var cookie = localStorage.getItem('cookie:accepted') commit('setCookieAccepted', cookie) }, setLifeTime({ commit }, value) { commit('setLifeTime', value) }, async saveLifeTime({ commit, rootState, dispatch }, value) { try { const response = await axios.post( url.saveLifeTime, { value: value }, { headers: { Token: rootState.login.user.accessToken }, timeout } ) commit('setLifeTime', response.data.value) } catch (e) { if (e.message == 'Network Error') { dispatch('connectionError/addError', null, { root: true }) } if (e.response) if (e.response.status === 401) dispatch('logout', null, { root: true }) } }, async getLifeTime({ commit, rootState, dispatch }) { try { if (!rootState.login.user.accessToken) { return } const response = await axios.get(url.getLifeTime, { headers: { Token: rootState.login.user.accessToken }, timeout }) commit('setLifeTime', response.data.value) var user = JSON.parse(localStorage.getItem('user')) user.group = response.data.group localStorage.setItem('user', JSON.stringify(user)) commit('updateAccessToken', user) } catch (e) { if (e.message == 'Network Error') { dispatch('connectionError/addError', null, { root: true }) } if (e.response) if (e.response.status === 401) dispatch('logout', null, { root: true }) } } } const getters = { loggingIn: state => { return state.loggingIn }, 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') } catch (e) { return false } }, isFinanzer: state => { try { return state.user.group.includes('moneymaster') } catch (e) { return false } }, isUser: state => { try { return state.user.group.includes('user') } catch (e) { return false } }, isGastro: state => { try { return state.user.group.includes('gastro') } catch (e) { return false } }, isExtern: state => { try { return state.user.group.includes('extern') } catch (e) { return false } }, isManagement: state => { try { return ( state.user.group.includes('vorstand') || state.user.group.includes('gastro') || state.user.group.includes('moneymaster') ) } catch (e) { return false } }, isLoggedIn: state => { return state.user.accessToken }, user: state => { return state.user }, cookieNotification: state => { return state.cookieNotification }, cookieAccepted: state => { return state.cookieAccepted }, lifeTime: state => { return state.lifeTime } } export default { state, mutations, actions, getters }