import decode from "jwt-decode"; import config from "./config"; import logger from "./logit"; import store from "../store"; //import axios from 'axios'; //import auth0 from 'auth0-js'; //import Router from 'vue-router'; //import Auth0Lock from 'auth0-lock'; //https://stackoverflow.com/questions/15551652/javascript-enum-flag-check const AuthorizationRoles = { ///No role set NoRole: 0, ///BizAdminLimited BizAdminLimited: 1, ///BizAdminFull BizAdminFull: 2, ///DispatchLimited DispatchLimited: 4, ///DispatchFull DispatchFull: 8, ///InventoryLimited InventoryLimited: 16, ///InventoryFull InventoryFull: 32, ///AccountingFull AccountingFull: 64, //No limited role, not sure if there is a need ///TechLimited TechLimited: 128, ///TechFull TechFull: 256, ///SubContractorLimited SubContractorLimited: 512, ///SubContractorFull SubContractorFull: 1024, ///ClientLimited ClientLimited: 2048, ///ClientFull ClientFull: 4096, ///OpsAdminLimited OpsAdminLimited: 8192, ///OpsAdminFull OpsAdminFull: 16384 }; //end AuthorizationRoles const TOKEN_KEY = "apitoken"; const USER_ROLES = AuthorizationRoles.NoRole; export function processLogin(response) { //is token present? if (!response || !response.data || !response.data.token) { logger.log("auth::processLogin -> token empty"); return Promise.reject(); } const token = decode(response.data.token); if (!token || !token.iss) { logger.log("auth::processLogin -> token empty"); return Promise.reject(); } if (token.iss != "ayanova.com") { logger.log("auth::processLogin -> token invalid (iss)", token.iss); return Promise.reject(); } //Token is valid, store it in session storage setToken(response.data.token); //Put app relevant items into vuex store so app can use them store.commit("authenticated", { authenticated: true, userId: Number(token.id), roles: token["ayanova/roles"] }); logger.log("User " + token.id + " logged in"); return Promise.resolve(true); } // var router = new Router({ // mode: 'history', // }); export function processLogout() { logger.log("Logout"); store.commit("notAuthenticated"); clearToken(); //router.go('/'); } export function getToken() { return sessionStorage.getItem(TOKEN_KEY); } function clearToken() { sessionStorage.removeItem(TOKEN_KEY); } // Get and store token in local storage export function setToken(token) { sessionStorage.setItem(TOKEN_KEY, token); } export function isLoggedIn() { //const token = getToken(); return !!config.apiToken && !isTokenExpired(config.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(); } //================ ROLES ================= //https://stackoverflow.com/questions/39359740/what-are-enum-flags-in-typescript export function hasRole(role) { return role === (USER_ROLES & role); // if ((role & flags.ERROR) == flags.ERROR) { // alert("ERROR IS SET"); // } } //TODO: Auth JWT needs to return roles as an int enum