No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 

155 líneas
4.9 KiB

  1. // ** UseJWT import to get config
  2. import axios from "axios";
  3. import {isUserLoggedIn} from "../utils/Utils";
  4. import jwtApplicationConfig from "auth/jwtApplicationConfig";
  5. import jwt_decode from "jwt-decode";
  6. import {apiPath} from "./utils";
  7. //import axios from "axios";
  8. export const refreshIntervalName = 'refreshInterval'
  9. export const predictProductionQty = 'predictProductionQty'
  10. export const predictUsageCount = 'predictUsageCount'
  11. export const windowCount = 'windowCount'
  12. import {useNavigate} from "react-router-dom";
  13. import {useDispatch} from "react-redux";
  14. // ** Handle User Login
  15. export const handleLogin = data => {
  16. return dispatch => {
  17. dispatch({
  18. type: 'LOGIN',
  19. data,
  20. jwtApplicationConfig,
  21. accessToken: data['accessToken'],
  22. refreshToken: data['refreshToken']
  23. })
  24. const loginDate = new Date()
  25. loginDate.setSeconds(loginDate.getSeconds() + 10)
  26. console.log(data)
  27. // ** Add to user, accessToken & refreshToken to localStorage
  28. localStorage.setItem('userData', JSON.stringify(data))
  29. localStorage.setItem('accessToken', data.accessToken)
  30. localStorage.setItem('refreshToken', data.refreshToken)
  31. localStorage.setItem('axiosToken', "Bearer " + data.accessToken)
  32. //localStorage.setItem(config.storageUserRoleKeyName, JSON.stringify(data.role).slice(1).slice(0, -1))
  33. localStorage.setItem(refreshIntervalName, "60")
  34. localStorage.setItem('refreshTokenExpirationTime', loginDate)
  35. // for demo only
  36. localStorage.setItem(windowCount, '0')
  37. localStorage.setItem(predictProductionQty, '0')
  38. localStorage.setItem(predictUsageCount, '0')
  39. }
  40. }
  41. export const isLocalTokenValid = () => {
  42. axios.get(`${apiPath}/test`)
  43. .then((response) => {
  44. if(response.status === 200){
  45. return true;
  46. }
  47. else{
  48. return false;
  49. }
  50. })
  51. .catch(error => {
  52. console.log(error);
  53. return false;
  54. });
  55. return false;
  56. }
  57. export const isTokenValid = () =>{
  58. if(localStorage.getItem('accessToken') !== null && localStorage.getItem('accessToken') !== 'null'){
  59. let isExpired = false;
  60. const token = localStorage.getItem('accessToken');
  61. let decodedToken=jwt_decode(token);
  62. let dateNow = new Date();
  63. if(decodedToken.exp < dateNow.getTime())
  64. isExpired = true;
  65. return isExpired;
  66. }
  67. else{
  68. return false;
  69. }
  70. }
  71. // ** Handle User Logout
  72. export const handleLogoutFunction = () => {
  73. return dispatch => {
  74. dispatch({
  75. type: 'LOGOUT',
  76. accessToken: null,
  77. refreshToken: null
  78. }
  79. )
  80. // console.log("logout");
  81. // ** Remove user, accessToken & refreshToken from localStorage
  82. localStorage.removeItem('userData')
  83. localStorage.removeItem('accessToken')
  84. localStorage.removeItem('refreshToken')
  85. //localStorage.removeItem(config.storageUserRoleKeyName)
  86. localStorage.removeItem(refreshIntervalName)
  87. localStorage.removeItem(windowCount)
  88. localStorage.removeItem(predictProductionQty)
  89. localStorage.removeItem(predictUsageCount)
  90. localStorage.removeItem("refreshTokenExpirationTime")
  91. }
  92. }
  93. // ** Handle axios token
  94. export const SetupAxiosInterceptors = () => {
  95. const navigate = useNavigate()
  96. const dispatch = useDispatch();
  97. //const updateLastRequestTime = useContext(TimerContext);
  98. axios.interceptors.request.use(
  99. config => {
  100. // ** Get token from localStorage
  101. const accessToken = localStorage.getItem("accessToken")
  102. // ** If token is present add it to request's Authorization Header
  103. if (isUserLoggedIn()) {
  104. config.headers.Authorization = `${jwtApplicationConfig.tokenType} ${accessToken}`
  105. }
  106. config.headers['X-Authorization'] = process.env.REACT_APP_API_KEY
  107. return config
  108. },
  109. error => Promise.reject(error)
  110. )
  111. axios.interceptors.response.use(
  112. response => {
  113. //updateLastRequestTime(Date.now());
  114. return response;
  115. },
  116. error => {
  117. // ** const { config, response: { status } } = error
  118. const {response} = error
  119. if (error.response.status === 401) {
  120. dispatch(handleLogoutFunction());
  121. navigate('/login');
  122. }
  123. // ** if (status === 401) {
  124. if (response.status === 401) {
  125. dispatch(handleLogoutFunction());
  126. navigate('/login');
  127. }
  128. if (response && response.status === 401) {
  129. dispatch(handleLogoutFunction());
  130. navigate('/login');
  131. }
  132. return Promise.reject(error)
  133. }
  134. )
  135. }