161859097SSurenNewareimport api from '@/store/api';
2fded0d11SDerick Montagueimport Cookies from 'js-cookie';
361859097SSurenNewareimport router from '@/router';
4*2b33526cSPaul Fertserimport { roles } from '@/router/routes';
5e080a1a7SDerick Montague
6e080a1a7SDerick Montagueconst AuthenticationStore = {
7e080a1a7SDerick Montague  namespaced: true,
8e080a1a7SDerick Montague  state: {
9b89eed27Skirankumarb07    consoleWindow: null,
104b0fc1dbSYoshie Muranaka    authError: false,
11d624dae9SYoshie Muranaka    xsrfCookie: Cookies.get('XSRF-TOKEN'),
12602e98aaSDerick Montague    isAuthenticatedCookie: Cookies.get('IsAuthenticated'),
13e080a1a7SDerick Montague  },
14e080a1a7SDerick Montague  getters: {
15b89eed27Skirankumarb07    consoleWindow: (state) => state.consoleWindow,
16602e98aaSDerick Montague    authError: (state) => state.authError,
17602e98aaSDerick Montague    isLoggedIn: (state) => {
18d624dae9SYoshie Muranaka      return (
19d624dae9SYoshie Muranaka        state.xsrfCookie !== undefined || state.isAuthenticatedCookie == 'true'
20d624dae9SYoshie Muranaka      );
21d624dae9SYoshie Muranaka    },
22602e98aaSDerick Montague    token: (state) => state.xsrfCookie,
23e080a1a7SDerick Montague  },
24e080a1a7SDerick Montague  mutations: {
256ce1a07cSYoshie Muranaka    authSuccess(state) {
264b0fc1dbSYoshie Muranaka      state.authError = false;
27d624dae9SYoshie Muranaka      state.xsrfCookie = Cookies.get('XSRF-TOKEN');
28e080a1a7SDerick Montague    },
29a06fe469SDerick Montague    authError(state, authError = true) {
30a06fe469SDerick Montague      state.authError = authError;
31676f2fcaSDerick Montague    },
32d624dae9SYoshie Muranaka    logout(state) {
33fded0d11SDerick Montague      Cookies.remove('XSRF-TOKEN');
34d624dae9SYoshie Muranaka      Cookies.remove('IsAuthenticated');
35b1f559f0SSukanya Pandey      localStorage.removeItem('storedUsername');
36d624dae9SYoshie Muranaka      state.xsrfCookie = undefined;
37d624dae9SYoshie Muranaka      state.isAuthenticatedCookie = undefined;
38602e98aaSDerick Montague    },
39b89eed27Skirankumarb07    setConsoleWindow: (state, window) => (state.consoleWindow = window),
40e080a1a7SDerick Montague  },
41e080a1a7SDerick Montague  actions: {
42d624dae9SYoshie Muranaka    login({ commit }, { username, password }) {
43a06fe469SDerick Montague      commit('authError', false);
44e080a1a7SDerick Montague      return api
45ebef6eeeSEd Tanous        .post('/login', {
46ebef6eeeSEd Tanous          username: username,
47ebef6eeeSEd Tanous          password: password,
48ebef6eeeSEd Tanous        })
49fded0d11SDerick Montague        .then(() => commit('authSuccess'))
50602e98aaSDerick Montague        .catch((error) => {
51fded0d11SDerick Montague          commit('authError');
52e080a1a7SDerick Montague          throw new Error(error);
53e080a1a7SDerick Montague        });
54e080a1a7SDerick Montague    },
55e080a1a7SDerick Montague    logout({ commit }) {
566ce1a07cSYoshie Muranaka      api
57fded0d11SDerick Montague        .post('/logout', { data: [] })
58b89eed27Skirankumarb07        .then(() => {
59b89eed27Skirankumarb07          commit('setConsoleWindow', false);
60b89eed27Skirankumarb07          commit('logout');
61b89eed27Skirankumarb07        })
62780733a1SThang Q. Nguyen        .then(() => router.push('/login'))
63602e98aaSDerick Montague        .catch((error) => console.log(error));
642c98b095SYoshie Muranaka    },
65bceaffacSPaul Fertser    getUserInfo({ commit }, username) {
66aeb19816SDamian Celico      return api
672c98b095SYoshie Muranaka        .get(`/redfish/v1/AccountService/Accounts/${username}`)
68bceaffacSPaul Fertser        .then(({ data }) => {
69bceaffacSPaul Fertser          commit('global/setPrivilege', data.RoleId, { root: true });
70bceaffacSPaul Fertser          return data;
71bceaffacSPaul Fertser        })
72*2b33526cSPaul Fertser        .catch((error) => {
73*2b33526cSPaul Fertser          if (error.response?.status === 404) {
74*2b33526cSPaul Fertser            // We have valid credentials but user isn't known, assume remote
75*2b33526cSPaul Fertser            // authentication (e.g. LDAP) and do not restrict the routing
76*2b33526cSPaul Fertser            commit('global/setPrivilege', roles.administrator, { root: true });
77*2b33526cSPaul Fertser            return {};
78*2b33526cSPaul Fertser          } else {
79*2b33526cSPaul Fertser            console.log(error);
80*2b33526cSPaul Fertser          }
81*2b33526cSPaul Fertser        });
82d624dae9SYoshie Muranaka    },
83d624dae9SYoshie Muranaka    resetStoreState({ state }) {
84d624dae9SYoshie Muranaka      state.authError = false;
85d624dae9SYoshie Muranaka      state.xsrfCookie = Cookies.get('XSRF-TOKEN');
86d624dae9SYoshie Muranaka      state.isAuthenticatedCookie = Cookies.get('IsAuthenticated');
87602e98aaSDerick Montague    },
88602e98aaSDerick Montague  },
89e080a1a7SDerick Montague};
90e080a1a7SDerick Montague
91e080a1a7SDerick Montagueexport default AuthenticationStore;
92