2019-06-12 13:16:55 -07:00
|
|
|
const PASSWORD_STRATEGY = 'password'
|
|
|
|
const TOKEN_STRATEGY = 'token'
|
|
|
|
|
|
|
|
// MFA strategies
|
|
|
|
const TOTP_STRATEGY = 'totp'
|
|
|
|
const RECOVERY_STRATEGY = 'recovery'
|
|
|
|
|
|
|
|
// initial state
|
|
|
|
const state = {
|
|
|
|
settings: {},
|
|
|
|
strategy: PASSWORD_STRATEGY,
|
|
|
|
initStrategy: PASSWORD_STRATEGY // default strategy from config
|
|
|
|
}
|
|
|
|
|
|
|
|
const resetState = (state) => {
|
|
|
|
state.strategy = state.initStrategy
|
|
|
|
state.settings = {}
|
|
|
|
}
|
|
|
|
|
|
|
|
// getters
|
|
|
|
const getters = {
|
|
|
|
settings: (state, getters) => {
|
|
|
|
return state.settings
|
|
|
|
},
|
|
|
|
requiredPassword: (state, getters, rootState) => {
|
|
|
|
return state.strategy === PASSWORD_STRATEGY
|
|
|
|
},
|
|
|
|
requiredToken: (state, getters, rootState) => {
|
|
|
|
return state.strategy === TOKEN_STRATEGY
|
|
|
|
},
|
|
|
|
requiredTOTP: (state, getters, rootState) => {
|
|
|
|
return state.strategy === TOTP_STRATEGY
|
|
|
|
},
|
|
|
|
requiredRecovery: (state, getters, rootState) => {
|
|
|
|
return state.strategy === RECOVERY_STRATEGY
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// mutations
|
|
|
|
const mutations = {
|
|
|
|
setInitialStrategy (state, strategy) {
|
|
|
|
if (strategy) {
|
|
|
|
state.initStrategy = strategy
|
|
|
|
state.strategy = strategy
|
|
|
|
}
|
|
|
|
},
|
|
|
|
requirePassword (state) {
|
|
|
|
state.strategy = PASSWORD_STRATEGY
|
|
|
|
},
|
|
|
|
requireToken (state) {
|
|
|
|
state.strategy = TOKEN_STRATEGY
|
|
|
|
},
|
2019-12-12 10:19:13 -08:00
|
|
|
requireMFA (state, { settings }) {
|
2019-06-12 13:16:55 -07:00
|
|
|
state.settings = settings
|
|
|
|
state.strategy = TOTP_STRATEGY // default strategy of MFA
|
|
|
|
},
|
|
|
|
requireRecovery (state) {
|
|
|
|
state.strategy = RECOVERY_STRATEGY
|
|
|
|
},
|
|
|
|
requireTOTP (state) {
|
|
|
|
state.strategy = TOTP_STRATEGY
|
|
|
|
},
|
|
|
|
abortMFA (state) {
|
|
|
|
resetState(state)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// actions
|
|
|
|
const actions = {
|
2019-07-06 14:54:17 -07:00
|
|
|
// eslint-disable-next-line camelcase
|
2019-07-05 00:02:14 -07:00
|
|
|
async login ({ state, dispatch, commit }, { access_token }) {
|
2019-06-12 13:16:55 -07:00
|
|
|
commit('setToken', access_token, { root: true })
|
|
|
|
await dispatch('loginUser', access_token, { root: true })
|
|
|
|
resetState(state)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export default {
|
|
|
|
namespaced: true,
|
|
|
|
state,
|
|
|
|
getters,
|
|
|
|
mutations,
|
|
|
|
actions
|
|
|
|
}
|