import Cookies from "cookies-js"; import jwt_decode from "jwt-decode"; const TokenCookieName = "ktusaktutoken"; // initial state const state = () => ({ token: null, tokenData: null, }); // getters const getters = { isValid(state) { if (state.token == null || state.tokenData == null) return false; const d = state.tokenData; if ( d.iss !== "https://login.microsoftonline.com/3415f2f7-f5a8-4092-b52a-003aaf844853/v2.0" ) return false; if (d.aud !== "5931fda0-e9e0-4754-80c2-18bcb9d9561a") return false; const now = new Date(); const exp = new Date(d.exp * 1000); if (now > exp) return false; return true; }, email(state, getters) { if (!getters.isValid) return null; return state.tokenData.email; }, userId(state, getters) { if (!getters.isValid) return null; return state.tokenData.email; }, }; // actions const actions = { async loadToken({ commit }) { const token = Cookies.get(TokenCookieName); commit("setToken", token); commit("computeTokenVars"); }, async setToken({ commit }, token) { Cookies.set(TokenCookieName, token); commit("setToken", token); commit("computeTokenVars"); }, }; // mutations const mutations = { setToken(state, token) { state.token = token; }, computeTokenVars(state) { if (state.token == null) return; try { state.tokenData = jwt_decode(state.token); } catch { console.log("Token was invalid."); state.tokenData = null; state.token = null; } }, }; export default { namespaced: true, state, getters, actions, mutations, };