Rename; Added EMS server; redis compose
This commit is contained in:
82
client/src/store/auth.ts
Normal file
82
client/src/store/auth.ts
Normal file
@ -0,0 +1,82 @@
|
||||
import { create } from 'zustand';
|
||||
import { TOKEN_AUTH_KEY, TOKEN_EXPIRY_DURATION, TOKEN_ISSUED_DATE_KEY, USER_DATA_KEY } from '../constants';
|
||||
import { AuthState } from '../interfaces/auth';
|
||||
import AuthService from '../services/AuthService';
|
||||
|
||||
export const useAuthStore = create<AuthState>(() => ({
|
||||
isAuthenticated: false,
|
||||
token: null,
|
||||
userData: null,
|
||||
}));
|
||||
|
||||
const login = (token: string) => {
|
||||
const issuedDate = Date.now();
|
||||
localStorage.setItem(TOKEN_AUTH_KEY, token);
|
||||
localStorage.setItem(TOKEN_ISSUED_DATE_KEY, issuedDate.toString());
|
||||
useAuthStore.setState(() => ({ isAuthenticated: true, token: token }))
|
||||
}
|
||||
|
||||
const logout = () => {
|
||||
localStorage.removeItem(TOKEN_AUTH_KEY);
|
||||
localStorage.removeItem(USER_DATA_KEY);
|
||||
localStorage.removeItem(TOKEN_ISSUED_DATE_KEY);
|
||||
useAuthStore.setState(() => ({ isAuthenticated: false, token: null, userData: null }));
|
||||
}
|
||||
|
||||
const initAuth = async () => {
|
||||
const token = localStorage.getItem(TOKEN_AUTH_KEY);
|
||||
const issuedDate = parseInt(localStorage.getItem(TOKEN_ISSUED_DATE_KEY) || '0', 10);
|
||||
const currentTime = Date.now();
|
||||
|
||||
if (token && issuedDate) {
|
||||
if (currentTime - issuedDate < TOKEN_EXPIRY_DURATION) {
|
||||
useAuthStore.setState(() => ({ isAuthenticated: true, token: token }))
|
||||
} else {
|
||||
try {
|
||||
await refreshToken();
|
||||
} catch (error) {
|
||||
console.error('Token refresh failed:', error);
|
||||
logout();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
logout()
|
||||
}
|
||||
}
|
||||
|
||||
const refreshToken = async () => {
|
||||
const token = useAuthStore.getState().token
|
||||
if (!token) throw new Error('No token to refresh');
|
||||
|
||||
try {
|
||||
const response = await AuthService.refreshToken(token)
|
||||
const newToken = response.data.access_token;
|
||||
const newIssuedDate = Date.now();
|
||||
localStorage.setItem(TOKEN_AUTH_KEY, newToken);
|
||||
localStorage.setItem(TOKEN_ISSUED_DATE_KEY, newIssuedDate.toString());
|
||||
useAuthStore.setState(() => ({ token: newToken }))
|
||||
} catch (error) {
|
||||
console.error('Failed to refresh token:', error);
|
||||
logout();
|
||||
}
|
||||
}
|
||||
|
||||
const getUserData = () => {
|
||||
const userData = localStorage.getItem(USER_DATA_KEY)
|
||||
return userData ? JSON.parse(userData) : {}
|
||||
}
|
||||
|
||||
const setUserData = (userData: string) => {
|
||||
const parsedData = JSON.parse(userData)
|
||||
localStorage.setItem(USER_DATA_KEY, userData)
|
||||
useAuthStore.setState(() => ({ userData: parsedData }))
|
||||
}
|
||||
|
||||
export {
|
||||
getUserData,
|
||||
setUserData,
|
||||
refreshToken,
|
||||
initAuth,
|
||||
login,
|
||||
logout,
|
||||
}
|
22
client/src/store/preferences.ts
Normal file
22
client/src/store/preferences.ts
Normal file
@ -0,0 +1,22 @@
|
||||
import { create } from 'zustand';
|
||||
import { PreferencesState } from '../interfaces/preferences';
|
||||
|
||||
export const usePrefStore = create<PreferencesState>(() => ({
|
||||
darkMode: false
|
||||
}));
|
||||
|
||||
const getDarkMode = () => {
|
||||
const darkMode = localStorage.getItem('darkMode')
|
||||
usePrefStore.setState(() => ({ darkMode: darkMode?.toLowerCase() === "true" ? true : false }))
|
||||
return darkMode
|
||||
}
|
||||
|
||||
const setDarkMode = (darkMode: boolean) => {
|
||||
localStorage.setItem('darkMode', JSON.stringify(darkMode))
|
||||
usePrefStore.setState(() => ({ darkMode: darkMode }))
|
||||
}
|
||||
|
||||
export {
|
||||
getDarkMode,
|
||||
setDarkMode
|
||||
}
|
0
client/src/store/user.ts
Normal file
0
client/src/store/user.ts
Normal file
Reference in New Issue
Block a user