feat: your authorization
This commit is contained in:
@ -2,7 +2,7 @@ import { YggdrasilClient, YggrasilAuthentication } from '@xmcl/user';
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
|
||||
// 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 {
|
||||
private client: YggdrasilClient;
|
||||
@ -49,6 +49,7 @@ export class AuthService {
|
||||
|
||||
async validate(accessToken: string, clientToken: string): Promise<boolean> {
|
||||
try {
|
||||
console.log(accessToken, clientToken);
|
||||
const response = await fetch(`${ELY_BY_AUTH_SERVER}/auth/validate`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
|
@ -479,7 +479,7 @@ export function initMinecraftHandlers() {
|
||||
username,
|
||||
memory = 4096,
|
||||
baseVersion = '1.21.4',
|
||||
fabricVersion = 'fabric0.16.14',
|
||||
fabricVersion = '0.16.14',
|
||||
packName = 'Comfort', // Название основной сборки
|
||||
versionToLaunchOverride = '', // Возможность переопределить версию для запуска
|
||||
serverIp = 'popa-popa.ru',
|
||||
@ -499,6 +499,8 @@ export function initMinecraftHandlers() {
|
||||
// Найти версию пакета, Fabric или базовую версию
|
||||
let versionToLaunch = versionToLaunchOverride;
|
||||
|
||||
console.log('fabric:', `${baseVersion}-fabric${fabricVersion}`);
|
||||
|
||||
if (!versionToLaunch) {
|
||||
if (
|
||||
versionsContents.includes(`${baseVersion}-fabric${fabricVersion}`)
|
||||
@ -598,6 +600,11 @@ export function initMinecraftHandlers() {
|
||||
}
|
||||
|
||||
// 2. Устанавливаем Fabric
|
||||
console.log('Попытка установки Fabric:', {
|
||||
minecraftVersion: baseVersion,
|
||||
fabricVersion: fabricVersion,
|
||||
minecraftDir: minecraftDir,
|
||||
});
|
||||
try {
|
||||
event.sender.send('installation-status', {
|
||||
step: 'fabric-list',
|
||||
@ -733,8 +740,13 @@ export function initMinecraftHandlers() {
|
||||
server: serverConfig, // Используем созданный объект конфигурации
|
||||
extraJVMArgs: [
|
||||
'-Dlog4j2.formatMsgNoLookups=true',
|
||||
`-javaagent:${authlibPath}=ely.by`,
|
||||
`-javaagent:${authlibPath}=http://147.78.65.214:8000`,
|
||||
`-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
|
||||
accessToken,
|
||||
@ -924,22 +936,18 @@ export function initAuthHandlers() {
|
||||
});
|
||||
|
||||
// Валидация токена
|
||||
ipcMain.handle('validate-token', async (event, accessToken) => {
|
||||
try {
|
||||
const clientToken = JSON.parse(
|
||||
fs.readFileSync(
|
||||
path.join(app.getPath('userData'), 'config.json'),
|
||||
'utf8',
|
||||
),
|
||||
).clientToken;
|
||||
|
||||
const valid = await authService.validate(accessToken, clientToken);
|
||||
return { valid };
|
||||
} catch (error) {
|
||||
console.error('Ошибка валидации токена:', error);
|
||||
return { valid: false };
|
||||
}
|
||||
});
|
||||
ipcMain.handle(
|
||||
'validate-token',
|
||||
async (event, { accessToken, clientToken }) => {
|
||||
try {
|
||||
const valid = await authService.validate(accessToken, clientToken);
|
||||
return { valid };
|
||||
} catch (error) {
|
||||
console.error('Ошибка валидации токена:', error);
|
||||
return { valid: false };
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
// Обновление токена
|
||||
ipcMain.handle(
|
||||
|
@ -26,7 +26,10 @@ const AuthCheck = ({ children }: { children: ReactNode }) => {
|
||||
const config = JSON.parse(savedConfig);
|
||||
if (config.accessToken) {
|
||||
// Можно добавить дополнительную проверку токена
|
||||
const isValid = await validateToken(config.accessToken);
|
||||
const isValid = await validateToken(
|
||||
config.accessToken,
|
||||
config.clientToken,
|
||||
);
|
||||
setIsAuthenticated(isValid);
|
||||
return;
|
||||
}
|
||||
@ -41,12 +44,12 @@ const AuthCheck = ({ children }: { children: ReactNode }) => {
|
||||
checkAuth();
|
||||
}, []);
|
||||
|
||||
const validateToken = async (token: string) => {
|
||||
const validateToken = async (accessToken: string, clientToken: string) => {
|
||||
try {
|
||||
// Используем IPC для валидации токена через main процесс
|
||||
const result = await window.electron.ipcRenderer.invoke(
|
||||
'validate-token',
|
||||
token,
|
||||
{ accessToken, clientToken },
|
||||
);
|
||||
|
||||
// Если токен недействителен, очищаем сохраненные данные в localStorage
|
||||
|
Reference in New Issue
Block a user