test fix authorization
This commit is contained in:
@ -1,83 +1,45 @@
|
||||
import { useState } from 'react';
|
||||
|
||||
interface AuthSession {
|
||||
accessToken: string;
|
||||
clientToken: string;
|
||||
selectedProfile: {
|
||||
id: string;
|
||||
name: string;
|
||||
};
|
||||
}
|
||||
import {
|
||||
authenticate,
|
||||
validateToken,
|
||||
refreshToken,
|
||||
type AuthSession,
|
||||
} from '../api';
|
||||
|
||||
export default function useAuth() {
|
||||
const [status, setStatus] = useState('idle');
|
||||
const [status, setStatus] = useState<
|
||||
'idle' | 'validating' | 'refreshing' | 'authenticating' | 'error'
|
||||
>('idle');
|
||||
|
||||
// Проверка валидности токена
|
||||
const validateSession = async (accessToken: string): Promise<boolean> => {
|
||||
try {
|
||||
setStatus('validating');
|
||||
const response = await window.electron.ipcRenderer.invoke(
|
||||
'validate-token',
|
||||
accessToken,
|
||||
);
|
||||
setStatus('idle');
|
||||
return response.valid;
|
||||
} catch (error) {
|
||||
console.error('Ошибка при валидации токена:', error);
|
||||
setStatus('error');
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
// Обновление токена
|
||||
const refreshSession = async (
|
||||
accessToken: string,
|
||||
clientToken: string,
|
||||
): Promise<AuthSession | null> => {
|
||||
try {
|
||||
setStatus('refreshing');
|
||||
const response = await window.electron.ipcRenderer.invoke(
|
||||
'refresh-token',
|
||||
{ accessToken, clientToken },
|
||||
);
|
||||
setStatus('idle');
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.error('Ошибка при обновлении токена:', error);
|
||||
setStatus('error');
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
// Аутентификация в Ely.by
|
||||
const authenticateWithElyBy = async (
|
||||
// Аутентификация (HTTP напрямую, без IPC!)
|
||||
const authenticateUser = async (
|
||||
username: string,
|
||||
password: string,
|
||||
saveConfigFunc: Function,
|
||||
saveConfigFunc: (config: any) => void,
|
||||
): Promise<AuthSession | null> => {
|
||||
try {
|
||||
setStatus('authenticating');
|
||||
const response = await window.electron.ipcRenderer.invoke(
|
||||
'authenticate',
|
||||
{ username, password },
|
||||
);
|
||||
|
||||
if (response && response.accessToken) {
|
||||
// Правильно сохраняем данные в конфигурации
|
||||
saveConfigFunc({
|
||||
username: response.selectedProfile.name, // Имя игрока как строка
|
||||
uuid: response.selectedProfile.id,
|
||||
accessToken: response.accessToken,
|
||||
clientToken: response.clientToken,
|
||||
memory: 4096, // Сохраняем значение по умолчанию или из предыдущей конфигурации
|
||||
});
|
||||
// Прямой HTTP-запрос к вашему серверу
|
||||
const session = await authenticate(username, password);
|
||||
|
||||
setStatus('authenticated');
|
||||
return response;
|
||||
}
|
||||
// Сохраняем в конфигурацию
|
||||
saveConfigFunc({
|
||||
username: session.selectedProfile.name,
|
||||
uuid: session.selectedProfile.id,
|
||||
accessToken: session.accessToken,
|
||||
clientToken: session.clientToken,
|
||||
memory: 4096,
|
||||
});
|
||||
|
||||
setStatus('error');
|
||||
return null;
|
||||
// Уведомляем Electron (для запуска Minecraft)
|
||||
await window.electron.ipcRenderer.invoke('auth-changed', {
|
||||
isAuthed: true,
|
||||
minecraftSession: session, // Передаём всю сессию
|
||||
});
|
||||
|
||||
setStatus('authenticating');
|
||||
return session;
|
||||
} catch (error) {
|
||||
console.error('Ошибка при аутентификации:', error);
|
||||
setStatus('error');
|
||||
@ -85,10 +47,53 @@ export default function useAuth() {
|
||||
}
|
||||
};
|
||||
|
||||
// Валидация токена (HTTP напрямую)
|
||||
const validateSession = async (accessToken: string): Promise<boolean> => {
|
||||
try {
|
||||
setStatus('validating');
|
||||
|
||||
// Получаем clientToken из localStorage
|
||||
const savedConfig = localStorage.getItem('launcher_config');
|
||||
if (!savedConfig) return false;
|
||||
|
||||
const config = JSON.parse(savedConfig);
|
||||
|
||||
// Прямой HTTP-запрос на валидацию
|
||||
const isValid = await validateToken(accessToken, config.clientToken);
|
||||
|
||||
setStatus('idle');
|
||||
return isValid;
|
||||
} catch (error) {
|
||||
console.error('Ошибка при валидации токена:', error);
|
||||
setStatus('error');
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
// Обновление токена (HTTP напрямую)
|
||||
const refreshSession = async (
|
||||
accessToken: string,
|
||||
clientToken: string,
|
||||
): Promise<AuthSession | null> => {
|
||||
try {
|
||||
setStatus('refreshing');
|
||||
|
||||
// Прямой HTTP-запрос на обновление
|
||||
const session = await refreshToken(accessToken, clientToken);
|
||||
|
||||
setStatus('idle');
|
||||
return session;
|
||||
} catch (error) {
|
||||
console.error('Ошибка при обновлении токена:', error);
|
||||
setStatus('error');
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
status,
|
||||
authenticateUser,
|
||||
validateSession,
|
||||
refreshSession,
|
||||
authenticateWithElyBy,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user