aboutsummaryrefslogtreecommitdiff
path: root/src/modules/auth_flow.js
blob: 34e1505389a1ebc1ac586f63d62120046806b671 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
const PASSWORD_STRATEGY = 'password'
const TOKEN_STRATEGY = 'token'

// MFA strategies
const TOTP_STRATEGY = 'totp'
const RECOVERY_STRATEGY = 'recovery'

// initial state
const state = {
  app: null,
  settings: {},
  strategy: PASSWORD_STRATEGY,
  initStrategy: PASSWORD_STRATEGY // default strategy from config
}

const resetState = (state) => {
  state.strategy = state.initStrategy
  state.settings = {}
  state.app = null
}

// getters
const getters = {
  app: (state, getters) => {
    return state.app
  },
  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
  },
  requireMFA (state, { app, settings }) {
    state.settings = settings
    state.app = app
    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 = {
  async login ({ state, dispatch, commit }, { access_token }) {
    commit('setToken', access_token, { root: true })
    await dispatch('loginUser', access_token, { root: true })
    resetState(state)
  }
}

export default {
  namespaced: true,
  state,
  getters,
  mutations,
  actions
}