working authirization

This commit is contained in:
2025-07-07 00:21:13 +05:00
parent b65b9538bb
commit 6f92b2acad
8 changed files with 997 additions and 703 deletions

90
src/main/auth-service.ts Normal file
View File

@ -0,0 +1,90 @@
import { YggdrasilClient, YggrasilAuthentication } from '@xmcl/user';
import { v4 as uuidv4 } from 'uuid';
// Ely.by сервер
const ELY_BY_AUTH_SERVER = 'https://authserver.ely.by';
export class AuthService {
private client: YggdrasilClient;
constructor() {
this.client = new YggdrasilClient(ELY_BY_AUTH_SERVER);
}
async login(
username: string,
password: string,
): Promise<YggrasilAuthentication> {
try {
// Генерируем уникальный clientToken
const clientToken = uuidv4();
// Выполняем запрос напрямую к правильному URL
const response = await fetch(`${ELY_BY_AUTH_SERVER}/auth/authenticate`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
username,
password,
clientToken,
requestUser: true,
}),
});
if (!response.ok) {
const errorText = await response.text();
throw new Error(`Ошибка авторизации: ${response.status} ${errorText}`);
}
const auth = await response.json();
console.log(`Аутентификация успешна для ${auth.selectedProfile?.name}`);
return auth;
} catch (error) {
console.error('Ошибка при авторизации:', error);
throw error;
}
}
async validate(accessToken: string, clientToken: string): Promise<boolean> {
try {
const response = await fetch(`${ELY_BY_AUTH_SERVER}/auth/validate`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ accessToken, clientToken }),
});
return response.ok;
} catch (error) {
console.error('Ошибка при валидации токена:', error);
return false;
}
}
async refresh(
accessToken: string,
clientToken: string,
): Promise<YggrasilAuthentication | null> {
try {
const response = await fetch(`${ELY_BY_AUTH_SERVER}/auth/refresh`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ accessToken, clientToken }),
});
if (!response.ok) {
return null;
}
return await response.json();
} catch (error) {
console.error('Ошибка при обновлении токена:', error);
return null;
}
}
}