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

174 lines
3.9 KiB
JavaScript
Raw Normal View History

2020-01-14 21:01:24 +00:00
import axios from 'axios'
import router from '@/router'
import url from '@/plugins/routes'
const state = {
2020-01-14 21:01:24 +00:00
user: {
username: null,
2020-01-23 22:25:21 +00:00
firstname: null,
lastname: null,
2020-01-14 21:01:24 +00:00
accessToken: null,
group: null
},
loggingIn: false,
loginError: null
}
const mutations = {
2020-01-14 21:01:24 +00:00
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)
}
2020-01-14 21:01:24 +00:00
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
2020-01-23 22:25:21 +00:00
state.user.firstname = data.firstname
state.user.lastname = data.lastname
2020-01-14 21:01:24 +00:00
}
},
logout(state) {
state.user.accessToken = null
state.user.username = null
state.user.group = null
2020-01-23 22:25:21 +00:00
state.user.firstname = null
state.user.lastname = null
2020-01-14 21:01:24 +00:00
}
}
const actions = {
2020-01-14 21:01:24 +00:00
async doLogin({ commit }, loginData) {
commit('loginStart')
try {
const response = await axios.post(url.login, { ...loginData })
2020-01-23 22:25:21 +00:00
console.log(response.data)
2020-01-14 21:01:24 +00:00
localStorage.setItem(
'user',
JSON.stringify({
username: response.data.username,
accessToken: response.data.token,
2020-01-23 22:25:21 +00:00
group: response.data.group,
firstname: response.data.firstname,
lastname: response.data.lastname
2020-01-14 21:01:24 +00:00
})
)
commit('loginStop', null)
commit('updateAccessToken', response.data)
if (state.user.group.includes('moneymaster')) {
router.push('/main/finanzer/overview')
2020-01-14 21:01:24 +00:00
} else if (state.user.group.includes('bar')) {
2020-01-17 00:01:10 +00:00
router.push('/main/bar/geruecht')
} else if (state.user.group.includes('user')) {
router.push('/main/user/add')
2020-03-04 20:12:08 +00:00
} else if (state.user.group.includes('extern')) {
router.push('/main')
2020-01-14 21:01:24 +00:00
}
} catch (err) {
commit('loginStop', err.response.data.error)
commit('updateAccessToken', {
username: null,
accessToken: null,
2020-01-23 22:25:21 +00:00
group: null,
firstname: null,
lastname: null
2020-01-14 21:01:24 +00:00
})
}
2020-01-14 21:01:24 +00:00
},
fetchAccessToken({ commit }) {
commit('updateAccessToken', localStorage.getItem('user'))
},
logout({ commit }) {
localStorage.removeItem('user')
commit('logout')
router.push('/login')
},
resetLoginError({ commit }) {
commit('loginStop')
}
}
const getters = {
2020-01-23 22:25:21 +00:00
loggingIn: state => {
return state.loggingIn
},
2020-01-14 21:01:24 +00:00
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
2020-01-17 00:01:10 +00:00
},
isBar: state => {
try {
return state.user.group.includes('bar')
2020-01-17 00:01:10 +00:00
} catch (e) {
return false
}
},
isFinanzer: state => {
try {
return state.user.group.includes('moneymaster')
2020-01-17 00:01:10 +00:00
} 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
}
},
2020-03-04 20:12:08 +00:00
isExtern: state => {
try {
return state.user.group.includes('extern')
} catch (e) {
return false
}
},
isManagement: state => {
try {
2020-03-04 20:12:08 +00:00
return state.user.group.includes('vorstand') || state.user.group.includes('gastro') || state.user.group.includes('moneymaster')
2020-01-17 00:01:10 +00:00
} catch (e) {
return false
}
},
isLoggedIn: state => {
return state.user.accessToken
2020-01-23 22:25:21 +00:00
},
user: state => {
return state.user
2020-01-14 21:01:24 +00:00
}
}
export default {
2020-01-14 21:01:24 +00:00
state,
mutations,
actions,
getters
}