import api from '@/store/api'; import Cookies from 'js-cookie'; import router from '@/router'; import { EncryptStorage } from 'encrypt-storage'; const AuthenticationStore = { namespaced: true, state: { authError: false, xsrfCookie: Cookies.get('XSRF-TOKEN'), isAuthenticatedCookie: Cookies.get('IsAuthenticated'), }, getters: { authError: (state) => state.authError, isLoggedIn: (state) => { return ( state.xsrfCookie !== undefined || state.isAuthenticatedCookie == 'true' ); }, token: (state) => state.xsrfCookie, role: () => { const encryptStorage = new EncryptStorage('ZAaZi(P,m5+BcM|UTox5'); return encryptStorage.getItem('storedUserrole'); }, }, mutations: { authSuccess(state) { state.authError = false; state.xsrfCookie = Cookies.get('XSRF-TOKEN'); }, authError(state, authError = true) { state.authError = authError; }, logout(state) { Cookies.remove('XSRF-TOKEN'); Cookies.remove('IsAuthenticated'); localStorage.removeItem('storedUsername'); state.xsrfCookie = undefined; state.isAuthenticatedCookie = undefined; }, setRole(state, role) { const encryptStorage = new EncryptStorage('ZAaZi(P,m5+BcM|UTox5'); encryptStorage.setItem('storedUserrole', role); }, }, actions: { login({ commit, dispatch }, { username, password }) { commit('authError', false); return api .post('/login', { data: [username, password] }) .then(() => { dispatch('getUser', username) .then((response) => { if (response.data?.RoleId) { commit('setRole', response.data.RoleId); } }) .catch((error) => { commit('authError'); throw new Error(error); }); commit('authSuccess'); }) .catch((error) => { commit('authError'); throw new Error(error); }); }, logout({ commit }) { api .post('/logout', { data: [] }) .then(() => commit('logout')) .then(() => router.go('/login')) .catch((error) => console.log(error)); }, checkPasswordChangeRequired({ dispatch }, username) { dispatch('getUser', username) .then(({ data: { PasswordChangeRequired } }) => PasswordChangeRequired) .catch((error) => console.log(error)); }, resetStoreState({ state }) { state.authError = false; state.xsrfCookie = Cookies.get('XSRF-TOKEN'); state.isAuthenticatedCookie = Cookies.get('IsAuthenticated'); }, getUser(_, username) { return api.get(`/redfish/v1/AccountService/Accounts/${username}`); }, }, }; export default AuthenticationStore;