flaschengeist-frontend/src/store/modules/login.js

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
}