2022-03-24 15:49:33 +00:00
|
|
|
import { useState } from './useState';
|
2022-04-05 14:30:53 +00:00
|
|
|
import { useRole } from './useRole';
|
2023-05-11 12:51:12 +00:00
|
|
|
import { useUserConfig } from './useUserConfig';
|
2024-02-28 10:28:57 +00:00
|
|
|
import axios from 'axios';
|
2024-03-15 11:42:08 +00:00
|
|
|
import useNotify from './useNotify';
|
2024-04-17 08:07:44 +00:00
|
|
|
const TOKEN_MULTIMEDIA = 'tokenMultimedia';
|
|
|
|
const TOKEN = 'token';
|
2022-03-24 15:49:33 +00:00
|
|
|
|
|
|
|
export function useSession() {
|
2024-03-15 11:42:08 +00:00
|
|
|
const { notify } = useNotify();
|
|
|
|
|
2022-03-24 15:49:33 +00:00
|
|
|
function getToken() {
|
2024-04-17 08:07:44 +00:00
|
|
|
const localToken = localStorage.getItem(TOKEN);
|
|
|
|
const sessionToken = sessionStorage.getItem(TOKEN);
|
2022-03-24 15:49:33 +00:00
|
|
|
|
|
|
|
return localToken || sessionToken || '';
|
|
|
|
}
|
2024-02-26 06:11:33 +00:00
|
|
|
function getTokenMultimedia() {
|
2024-04-17 11:26:35 +00:00
|
|
|
const localTokenMultimedia = localStorage.getItem(TOKEN_MULTIMEDIA);
|
2024-04-17 08:07:44 +00:00
|
|
|
const sessionTokenMultimedia = sessionStorage.getItem(TOKEN_MULTIMEDIA);
|
2024-02-26 06:11:33 +00:00
|
|
|
|
|
|
|
return localTokenMultimedia || sessionTokenMultimedia || '';
|
|
|
|
}
|
2022-03-24 15:49:33 +00:00
|
|
|
|
|
|
|
function setToken(data) {
|
2024-04-17 08:09:44 +00:00
|
|
|
const storage = data.keepLogin ? localStorage : sessionStorage;
|
|
|
|
storage.setItem(TOKEN, data.token);
|
|
|
|
storage.setItem(TOKEN_MULTIMEDIA, data.tokenMultimedia);
|
2022-03-24 15:49:33 +00:00
|
|
|
}
|
2024-03-15 12:21:26 +00:00
|
|
|
async function destroyToken(url, storage, key) {
|
|
|
|
if (storage.getItem(key)) {
|
2024-03-15 11:42:08 +00:00
|
|
|
try {
|
2024-03-15 12:21:26 +00:00
|
|
|
await axios.post(url, null, {
|
|
|
|
headers: { Authorization: storage.getItem(key) },
|
2024-03-15 11:42:08 +00:00
|
|
|
});
|
|
|
|
} catch (error) {
|
2024-03-15 11:43:56 +00:00
|
|
|
notify('errors.statusUnauthorized', 'negative');
|
2024-03-15 11:42:08 +00:00
|
|
|
} finally {
|
2024-03-15 12:21:26 +00:00
|
|
|
storage.removeItem(key);
|
2024-03-15 11:42:08 +00:00
|
|
|
}
|
2024-02-28 10:28:57 +00:00
|
|
|
}
|
2024-03-15 12:21:26 +00:00
|
|
|
}
|
|
|
|
async function destroy() {
|
|
|
|
const tokens = {
|
|
|
|
tokenMultimedia: 'Accounts/logout',
|
|
|
|
token: 'VnUsers/logout',
|
|
|
|
};
|
|
|
|
for (const [key, url] of Object.entries(tokens)) {
|
|
|
|
await destroyToken(url, localStorage, key);
|
|
|
|
await destroyToken(url, sessionStorage, key);
|
2024-02-28 10:28:57 +00:00
|
|
|
}
|
2022-04-08 13:53:21 +00:00
|
|
|
|
2022-03-24 15:49:33 +00:00
|
|
|
const { setUser } = useState();
|
|
|
|
|
|
|
|
setUser({
|
|
|
|
id: 0,
|
2022-04-08 13:53:21 +00:00
|
|
|
name: '',
|
2022-03-24 15:49:33 +00:00
|
|
|
nickname: '',
|
2022-04-20 11:58:53 +00:00
|
|
|
lang: '',
|
2022-04-20 11:10:37 +00:00
|
|
|
darkMode: null,
|
2022-03-24 15:49:33 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2024-02-26 06:11:33 +00:00
|
|
|
async function login(token, tokenMultimedia, keepLogin) {
|
|
|
|
setToken({ token, tokenMultimedia, keepLogin });
|
2022-04-05 14:30:53 +00:00
|
|
|
|
2023-05-11 12:51:12 +00:00
|
|
|
await useRole().fetch();
|
|
|
|
await useUserConfig().fetch();
|
2022-04-05 14:30:53 +00:00
|
|
|
}
|
|
|
|
|
2022-03-24 15:49:33 +00:00
|
|
|
function isLoggedIn() {
|
2024-04-17 08:07:44 +00:00
|
|
|
const localToken = localStorage.getItem(TOKEN);
|
|
|
|
const sessionToken = sessionStorage.getItem(TOKEN);
|
2022-03-24 15:49:33 +00:00
|
|
|
|
|
|
|
return !!(localToken || sessionToken);
|
|
|
|
}
|
|
|
|
|
|
|
|
return {
|
|
|
|
getToken,
|
2024-02-26 06:11:33 +00:00
|
|
|
getTokenMultimedia,
|
2022-03-24 15:49:33 +00:00
|
|
|
setToken,
|
|
|
|
destroy,
|
2022-04-05 14:30:53 +00:00
|
|
|
login,
|
2022-03-24 15:49:33 +00:00
|
|
|
isLoggedIn,
|
|
|
|
};
|
|
|
|
}
|