Files
aso/frontend/hospital-portal/src/utils/token.ts
2024-05-21 10:36:39 +07:00

123 lines
3.9 KiB
TypeScript

import axios from './axios';
// ----------------------------------------------------------------------
// const isValidToken = (accessToken: string) => {
// if (!accessToken) {
// return false;
// }
// const decoded = jwtDecode<{ exp: number }>(accessToken);
// const currentTime = Date.now() / 1000;
// return decoded.exp > currentTime;
// };
// const handleTokenExpired = () => {
// let expiredTimer;
// window.clearTimeout(expiredTimer);
// const currentTime = Date.now();
// const timeLeft = exp * 1000 - currentTime;
// console.log(timeLeft);
// expiredTimer = window.setTimeout(() => {
// console.log('expired');
// // You can do what ever you want here, like show a notification
// }, timeLeft);
// };
// let expiredCookie = 1/24/60; 1 menit
let expiredCookie = 12/24; //12 jam
const setCookie = (name:any, value:any, days:any) => {
let expires = "";
if (days) {
const date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
expires = "; expires=" + date.toUTCString();
}
document.cookie = name + "=" + decodeURIComponent(value || "") + expires + "; path=/; SameSite=Strict";
};
const setSession = (accessToken: string | null, rememberMe: boolean) => {
if (accessToken) {
const userString = getUser();
const storedUser = userString ? JSON.parse(userString) : null;
if(rememberMe)
{
localStorage.setItem('accessToken', accessToken);
}
else
{
setCookie('accessToken', accessToken, expiredCookie);
setCookie('rememberMe', 'OK', expiredCookie);
}
axios.defaults.headers.common.Authorization = `Bearer ${accessToken}`;
axios.defaults.headers.common['Accept-Language'] = localStorage.getItem('currentLocale') ?? 'id-ID';
axios.defaults.headers.common['Accept'] = 'application/json';
axios.defaults.headers.common['Content-Type'] = 'application/json';
axios.defaults.headers.common['Organization-id'] = storedUser?.organization_id;
// This function below will handle when token is expired
// const { exp } = jwtDecode(accessToken);
// handleTokenExpired(exp);
} else {
localStorage.removeItem('accessToken');
removeCookie('accessToken');
removeCookie('rememberMe');
delete axios.defaults.headers.common.Authorization;
delete axios.defaults.headers.common['Accept-Language'];
delete axios.defaults.headers.common['Accept'];
delete axios.defaults.headers.common['Content-Type'];
}
};
const setUser = (user: any, rememberMe: boolean) => {
if (user) {
if(rememberMe)
{
localStorage.setItem('user', JSON.stringify(user));
}
else
{
setCookie('user', JSON.stringify(user), expiredCookie);
setCookie('rememberMe', 'OK', expiredCookie);
}
} else {
localStorage.removeItem('user');
removeCookie('user');
removeCookie('rememberMe');
}
};
const getCookie = (name:any) => {
const cookies = document.cookie.split('; ');
for (let i = 0; i < cookies.length; i++) {
const cookiePair = cookies[i].split('=');
if (cookiePair[0] === name) {
return decodeURIComponent(cookiePair[1]);
}
}
return null;
};
const getSession = () => {
const localToken = window.localStorage.getItem('accessToken');
const cookieToken = getCookie('accessToken');
// Prioritaskan token dari localStorage
return localToken || cookieToken;
};
// const getUser = () => window.localStorage.getItem('user') || window.sessionStorage.getItem('user')
const getUser = () => {
const localUser = window.localStorage.getItem('user');
const cookieUser = getCookie('user');
// Prioritaskan token dari localStorage
return localUser || cookieUser;
};
const removeCookie = (name:any) => {
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
};
export { setSession, getSession, setUser, getUser, getCookie };