7383-testToMaster #370
|
@ -3,11 +3,13 @@ import { useRole } from './useRole';
|
||||||
import { useUserConfig } from './useUserConfig';
|
import { useUserConfig } from './useUserConfig';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import useNotify from './useNotify';
|
import useNotify from './useNotify';
|
||||||
|
import { useTokenConfig } from './useTokenConfig';
|
||||||
const TOKEN_MULTIMEDIA = 'tokenMultimedia';
|
const TOKEN_MULTIMEDIA = 'tokenMultimedia';
|
||||||
const TOKEN = 'token';
|
const TOKEN = 'token';
|
||||||
|
|
||||||
export function useSession() {
|
export function useSession() {
|
||||||
const { notify } = useNotify();
|
const { notify } = useNotify();
|
||||||
|
let isCheckingToken = false;
|
||||||
|
|
||||||
function getToken() {
|
function getToken() {
|
||||||
const localToken = localStorage.getItem(TOKEN);
|
const localToken = localStorage.getItem(TOKEN);
|
||||||
|
@ -23,9 +25,12 @@ export function useSession() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function setToken(data) {
|
function setToken(data) {
|
||||||
const storage = data.keepLogin ? localStorage : sessionStorage;
|
let keepLogin = data.keepLogin ?? sessionStorage.getItem('keepLogin');
|
||||||
|
if (!keepLogin) keepLogin = false;
|
||||||
|
const storage = keepLogin ? localStorage : sessionStorage;
|
||||||
storage.setItem(TOKEN, data.token);
|
storage.setItem(TOKEN, data.token);
|
||||||
storage.setItem(TOKEN_MULTIMEDIA, data.tokenMultimedia);
|
storage.setItem(TOKEN_MULTIMEDIA, data.tokenMultimedia);
|
||||||
|
sessionStorage.setItem('keepLogin', keepLogin);
|
||||||
}
|
}
|
||||||
async function destroyToken(url, storage, key) {
|
async function destroyToken(url, storage, key) {
|
||||||
if (storage.getItem(key)) {
|
if (storage.getItem(key)) {
|
||||||
|
@ -59,6 +64,8 @@ export function useSession() {
|
||||||
lang: '',
|
lang: '',
|
||||||
darkMode: null,
|
darkMode: null,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
stopRenewer();
|
||||||
}
|
}
|
||||||
|
|
||||||
async function login(token, tokenMultimedia, keepLogin) {
|
async function login(token, tokenMultimedia, keepLogin) {
|
||||||
|
@ -66,6 +73,9 @@ export function useSession() {
|
||||||
|
|
||||||
await useRole().fetch();
|
await useRole().fetch();
|
||||||
await useUserConfig().fetch();
|
await useUserConfig().fetch();
|
||||||
|
await useTokenConfig().fetch();
|
||||||
|
|
||||||
|
await checkValidity();
|
||||||
}
|
}
|
||||||
|
|
||||||
function isLoggedIn() {
|
function isLoggedIn() {
|
||||||
|
@ -75,6 +85,42 @@ export function useSession() {
|
||||||
return !!(localToken || sessionToken);
|
return !!(localToken || sessionToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function stopRenewer() {
|
||||||
|
clearInterval(this.intervalId);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function renewToken() {
|
||||||
|
const _token = getToken();
|
||||||
|
const token = await axios.post('VnUsers/renewToken', {
|
||||||
|
headers: { Authorization: _token },
|
||||||
|
});
|
||||||
|
const _tokenMultimedia = getTokenMultimedia();
|
||||||
|
const tokenMultimedia = await axios.post('VnUsers/renewToken', {
|
||||||
|
headers: { Authorization: _tokenMultimedia },
|
||||||
|
});
|
||||||
|
setToken({ token, tokenMultimedia });
|
||||||
|
}
|
||||||
|
|
||||||
|
async function checkValidity() {
|
||||||
|
const { getTokenConfig } = useState();
|
||||||
|
|
||||||
|
const tokenConfig = getTokenConfig();
|
||||||
|
const created = +localStorage.getItem('created');
|
||||||
|
const ttl = localStorage.getItem('ttl');
|
||||||
|
|
||||||
|
if (isCheckingToken || !created) return;
|
||||||
|
isCheckingToken = true;
|
||||||
|
|
||||||
|
const renewPeriodInSeconds = Math.min(ttl, tokenConfig.value.renewPeriod) * 1000;
|
||||||
|
const maxDate = created + renewPeriodInSeconds;
|
||||||
|
const now = new Date();
|
||||||
|
|
||||||
|
if (now.getTime() <= maxDate) return (isCheckingToken = false);
|
||||||
|
|
||||||
|
await renewToken();
|
||||||
|
isCheckingToken = false;
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
getToken,
|
getToken,
|
||||||
getTokenMultimedia,
|
getTokenMultimedia,
|
||||||
|
|
|
@ -8,6 +8,9 @@ export function useTokenConfig() {
|
||||||
|
|
||||||
async function fetch() {
|
async function fetch() {
|
||||||
try {
|
try {
|
||||||
|
let tokenConfigState = state.getTokenConfig();
|
||||||
|
if (tokenConfigState) return tokenConfigState;
|
||||||
|
|
||||||
const tokenConfig = await axios.get('AccessTokenConfigs/findOne', {
|
const tokenConfig = await axios.get('AccessTokenConfigs/findOne', {
|
||||||
filter: { fields: ['renewInterval', 'renewPeriod'] },
|
filter: { fields: ['renewInterval', 'renewPeriod'] },
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue