// ** UseJWT import to get config import axios from "axios"; import {isUserLoggedIn} from "../utils/Utils"; import jwtApplicationConfig from "auth/jwtApplicationConfig"; import jwt_decode from "jwt-decode"; import {apiPath} from "./utils"; //import axios from "axios"; export const refreshIntervalName = 'refreshInterval' export const predictProductionQty = 'predictProductionQty' export const predictUsageCount = 'predictUsageCount' export const windowCount = 'windowCount' import {useNavigate} from "react-router-dom"; import {useDispatch} from "react-redux"; // ** Handle User Login export const handleLogin = data => { return dispatch => { dispatch({ type: 'LOGIN', data, jwtApplicationConfig, accessToken: data['accessToken'], refreshToken: data['refreshToken'] }) const loginDate = new Date() loginDate.setSeconds(loginDate.getSeconds() + 10) console.log(data) // ** Add to user, accessToken & refreshToken to localStorage localStorage.setItem('userData', JSON.stringify(data)) localStorage.setItem('accessToken', data.accessToken) localStorage.setItem('refreshToken', data.refreshToken) localStorage.setItem('axiosToken', "Bearer " + data.accessToken) //localStorage.setItem(config.storageUserRoleKeyName, JSON.stringify(data.role).slice(1).slice(0, -1)) localStorage.setItem(refreshIntervalName, "60") localStorage.setItem('refreshTokenExpirationTime', loginDate) // for demo only localStorage.setItem(windowCount, '0') localStorage.setItem(predictProductionQty, '0') localStorage.setItem(predictUsageCount, '0') } } export const isLocalTokenValid = () => { axios.get(`${apiPath}/test`) .then((response) => { if(response.status === 200){ return true; } else{ return false; } }) .catch(error => { console.log(error); return false; }); return false; } export const isTokenValid = () =>{ if(localStorage.getItem('accessToken') !== null && localStorage.getItem('accessToken') !== 'null'){ let isExpired = false; const token = localStorage.getItem('accessToken'); let decodedToken=jwt_decode(token); let dateNow = new Date(); if(decodedToken.exp < dateNow.getTime()) isExpired = true; return isExpired; } else{ return false; } } // ** Handle User Logout export const handleLogoutFunction = () => { return dispatch => { dispatch({ type: 'LOGOUT', accessToken: null, refreshToken: null } ) // console.log("logout"); // ** Remove user, accessToken & refreshToken from localStorage localStorage.removeItem('userData') localStorage.removeItem('accessToken') localStorage.removeItem('refreshToken') //localStorage.removeItem(config.storageUserRoleKeyName) localStorage.removeItem(refreshIntervalName) localStorage.removeItem(windowCount) localStorage.removeItem(predictProductionQty) localStorage.removeItem(predictUsageCount) localStorage.removeItem("refreshTokenExpirationTime") } } // ** Handle axios token export const SetupAxiosInterceptors = () => { const navigate = useNavigate() const dispatch = useDispatch(); //const updateLastRequestTime = useContext(TimerContext); axios.interceptors.request.use( config => { // ** Get token from localStorage const accessToken = localStorage.getItem("accessToken") // ** If token is present add it to request's Authorization Header if (isUserLoggedIn()) { config.headers.Authorization = `${jwtApplicationConfig.tokenType} ${accessToken}` } config.headers['X-Authorization'] = process.env.REACT_APP_API_KEY return config }, error => Promise.reject(error) ) axios.interceptors.response.use( response => { //updateLastRequestTime(Date.now()); return response; }, error => { // ** const { config, response: { status } } = error const {response} = error if (error.response.status === 401) { dispatch(handleLogoutFunction()); navigate('/login'); } // ** if (status === 401) { if (response.status === 401) { dispatch(handleLogoutFunction()); navigate('/login'); } if (response && response.status === 401) { dispatch(handleLogoutFunction()); navigate('/login'); } return Promise.reject(error) } ) }