Files
raven-client/ayanova/src/api/authutil.js
2020-01-31 22:54:07 +00:00

90 lines
2.1 KiB
JavaScript

/* xeslint-disable */
import decode from "jwt-decode";
import initialize from "./initialize";
export function processLogin(response) {
var promise = new Promise(function(resolve, reject) {
//is token present?
if (!response || !response.data || !response.data.token) {
window.$gz.store.commit(
"logItem",
"auth::processLogin -> response empty"
);
return reject();
}
const token = decode(response.data.token);
if (!token || !token.iss) {
window.$gz.store.commit(
"logItem",
"auth::processLogin -> response token empty"
);
return reject();
}
if (token.iss != "ayanova.com") {
window.$gz.store.commit(
"logItem",
"auth::processLogin -> token invalid (iss): " + token.iss
);
return reject();
}
//Put app relevant items into vuex store so app can use them
window.$gz.store.commit("login", {
apiToken: response.data.token,
authenticated: true,
userId: Number(token.id),
userName: token.name,
roles: token["ayanova/roles"],
userType: token["usertype"]
});
//Initialize the application
initialize().then(() => {
window.$gz.store.commit(
"logItem",
"auth::processLogin -> User " + token.id + " logged in"
);
resolve(true);
});
});
return promise;
}
export function processLogout() {
if (window.$gz.store.state.authenticated) {
window.$gz.store.commit(
"logItem",
"auth::processLogout -> User logged out"
);
}
window.$gz.store.commit("logout");
sessionStorage.clear(); //clear all temporary session storage data
}
export function isLoggedIn() {
//const token = getToken();
return (
!!window.$gz.store.state.apiToken &&
!isTokenExpired(window.$gz.store.state.apiToken)
);
}
function getTokenExpirationDate(encodedToken) {
const token = decode(encodedToken);
if (!token.exp) {
return null;
}
const date = new Date(0);
date.setUTCSeconds(token.exp);
return date;
}
function isTokenExpired(token) {
const expirationDate = getTokenExpirationDate(token);
return expirationDate < new Date();
}