feat: your authorization

This commit is contained in:
2025-07-18 00:51:08 +05:00
parent 591e354dcb
commit 7938555c91
3 changed files with 34 additions and 22 deletions

View File

@ -2,7 +2,7 @@ import { YggdrasilClient, YggrasilAuthentication } from '@xmcl/user';
import { v4 as uuidv4 } from 'uuid'; import { v4 as uuidv4 } from 'uuid';
// Ely.by сервер // Ely.by сервер
const ELY_BY_AUTH_SERVER = 'https://authserver.ely.by'; const ELY_BY_AUTH_SERVER = 'http://127.0.0.1:8000';
export class AuthService { export class AuthService {
private client: YggdrasilClient; private client: YggdrasilClient;
@ -49,6 +49,7 @@ export class AuthService {
async validate(accessToken: string, clientToken: string): Promise<boolean> { async validate(accessToken: string, clientToken: string): Promise<boolean> {
try { try {
console.log(accessToken, clientToken);
const response = await fetch(`${ELY_BY_AUTH_SERVER}/auth/validate`, { const response = await fetch(`${ELY_BY_AUTH_SERVER}/auth/validate`, {
method: 'POST', method: 'POST',
headers: { headers: {

View File

@ -479,7 +479,7 @@ export function initMinecraftHandlers() {
username, username,
memory = 4096, memory = 4096,
baseVersion = '1.21.4', baseVersion = '1.21.4',
fabricVersion = 'fabric0.16.14', fabricVersion = '0.16.14',
packName = 'Comfort', // Название основной сборки packName = 'Comfort', // Название основной сборки
versionToLaunchOverride = '', // Возможность переопределить версию для запуска versionToLaunchOverride = '', // Возможность переопределить версию для запуска
serverIp = 'popa-popa.ru', serverIp = 'popa-popa.ru',
@ -499,6 +499,8 @@ export function initMinecraftHandlers() {
// Найти версию пакета, Fabric или базовую версию // Найти версию пакета, Fabric или базовую версию
let versionToLaunch = versionToLaunchOverride; let versionToLaunch = versionToLaunchOverride;
console.log('fabric:', `${baseVersion}-fabric${fabricVersion}`);
if (!versionToLaunch) { if (!versionToLaunch) {
if ( if (
versionsContents.includes(`${baseVersion}-fabric${fabricVersion}`) versionsContents.includes(`${baseVersion}-fabric${fabricVersion}`)
@ -598,6 +600,11 @@ export function initMinecraftHandlers() {
} }
// 2. Устанавливаем Fabric // 2. Устанавливаем Fabric
console.log('Попытка установки Fabric:', {
minecraftVersion: baseVersion,
fabricVersion: fabricVersion,
minecraftDir: minecraftDir,
});
try { try {
event.sender.send('installation-status', { event.sender.send('installation-status', {
step: 'fabric-list', step: 'fabric-list',
@ -733,8 +740,13 @@ export function initMinecraftHandlers() {
server: serverConfig, // Используем созданный объект конфигурации server: serverConfig, // Используем созданный объект конфигурации
extraJVMArgs: [ extraJVMArgs: [
'-Dlog4j2.formatMsgNoLookups=true', '-Dlog4j2.formatMsgNoLookups=true',
`-javaagent:${authlibPath}=ely.by`, `-javaagent:${authlibPath}=http://147.78.65.214:8000`,
`-Xmx${memory}M`, `-Xmx${memory}M`,
'-Dauthlibinjector.skinWhitelist=127.0.0.1,falrfg-213-87-196-173.ru.tuna.am',
'-Dauthlibinjector.debug=verbose,authlib',
'-Dauthlibinjector.legacySkinPolyfill=enabled',
'-Dauthlibinjector.mojangAntiFeatures=disabled',
'-Dcom.mojang.authlib.disableSecureProfileEndpoints=true',
], ],
// Используем данные аутентификации Yggdrasil // Используем данные аутентификации Yggdrasil
accessToken, accessToken,
@ -924,22 +936,18 @@ export function initAuthHandlers() {
}); });
// Валидация токена // Валидация токена
ipcMain.handle('validate-token', async (event, accessToken) => { ipcMain.handle(
'validate-token',
async (event, { accessToken, clientToken }) => {
try { try {
const clientToken = JSON.parse(
fs.readFileSync(
path.join(app.getPath('userData'), 'config.json'),
'utf8',
),
).clientToken;
const valid = await authService.validate(accessToken, clientToken); const valid = await authService.validate(accessToken, clientToken);
return { valid }; return { valid };
} catch (error) { } catch (error) {
console.error('Ошибка валидации токена:', error); console.error('Ошибка валидации токена:', error);
return { valid: false }; return { valid: false };
} }
}); },
);
// Обновление токена // Обновление токена
ipcMain.handle( ipcMain.handle(

View File

@ -26,7 +26,10 @@ const AuthCheck = ({ children }: { children: ReactNode }) => {
const config = JSON.parse(savedConfig); const config = JSON.parse(savedConfig);
if (config.accessToken) { if (config.accessToken) {
// Можно добавить дополнительную проверку токена // Можно добавить дополнительную проверку токена
const isValid = await validateToken(config.accessToken); const isValid = await validateToken(
config.accessToken,
config.clientToken,
);
setIsAuthenticated(isValid); setIsAuthenticated(isValid);
return; return;
} }
@ -41,12 +44,12 @@ const AuthCheck = ({ children }: { children: ReactNode }) => {
checkAuth(); checkAuth();
}, []); }, []);
const validateToken = async (token: string) => { const validateToken = async (accessToken: string, clientToken: string) => {
try { try {
// Используем IPC для валидации токена через main процесс // Используем IPC для валидации токена через main процесс
const result = await window.electron.ipcRenderer.invoke( const result = await window.electron.ipcRenderer.invoke(
'validate-token', 'validate-token',
token, { accessToken, clientToken },
); );
// Если токен недействителен, очищаем сохраненные данные в localStorage // Если токен недействителен, очищаем сохраненные данные в localStorage