import { MemoryRouter as Router, Routes, Route, Navigate, useNavigate, } from 'react-router-dom'; import Login from './pages/Login'; import LaunchPage from './pages/LaunchPage'; import { ReactNode, useEffect, useState } from 'react'; import './App.css'; import TopBar from './components/TopBar'; import { Box } from '@mui/material'; import MinecraftBackground from './components/MinecraftBackground'; import { Notifier } from './components/Notifier'; import { VersionsExplorer } from './pages/VersionsExplorer'; import Profile from './pages/Profile'; import Shop from './pages/Shop'; import Marketplace from './pages/Marketplace'; import { Registration } from './pages/Registration'; const AuthCheck = ({ children }: { children: ReactNode }) => { const [isAuthenticated, setIsAuthenticated] = useState(null); useEffect(() => { const checkAuth = async () => { try { const savedConfig = localStorage.getItem('launcher_config'); if (savedConfig) { const config = JSON.parse(savedConfig); if (config.accessToken) { // Можно добавить дополнительную проверку токена const isValid = await validateToken( config.accessToken, config.clientToken, ); setIsAuthenticated(isValid); return; } } setIsAuthenticated(false); } catch (error) { console.error('Ошибка проверки авторизации:', error); setIsAuthenticated(false); } }; checkAuth(); }, []); const validateToken = async (accessToken: string, clientToken: string) => { try { // Используем IPC для валидации токена через main процесс const result = await window.electron.ipcRenderer.invoke( 'validate-token', { accessToken, clientToken }, ); // Если токен недействителен, очищаем сохраненные данные в localStorage if (!result.valid) { console.log( 'Токен недействителен, очищаем данные авторизации из localStorage', ); const savedConfig = localStorage.getItem('launcher_config'); if (savedConfig) { const config = JSON.parse(savedConfig); // Сохраняем только логин и другие настройки, но удаляем токены const cleanedConfig = { username: config.username, memory: config.memory || 4096, comfortVersion: config.comfortVersion || '', password: '', // Очищаем пароль для безопасности }; localStorage.setItem( 'launcher_config', JSON.stringify(cleanedConfig), ); } } return result.valid; } catch (error) { console.error('Ошибка проверки токена:', error); return false; } }; if (isAuthenticated === null) { return
Loading...
; } return isAuthenticated ? children : ; }; const App = () => { // Просто используйте window.open без useNavigate const handleRegister = () => { window.open('https://account.ely.by/register', '_blank'); }; const [username, setUsername] = useState(null); useEffect(() => { const savedConfig = localStorage.getItem('launcher_config'); if (savedConfig) { const config = JSON.parse(savedConfig); if (config.username) { setUsername(config.username); } } }, []); return ( } /> } /> } /> } /> } /> } /> } /> ); }; export default App;