266 lines
6.7 KiB
JavaScript
266 lines
6.7 KiB
JavaScript
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('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
|
|
}
|