Переделан способ авторизации по qr
All checks were successful
Release / pack-and-publish (release) Successful in 1m5s

This commit is contained in:
FrigaT
2026-04-20 14:31:47 +03:00
parent a7caf829d3
commit 0bbaac5689
15 changed files with 194 additions and 50 deletions

View File

@@ -26,8 +26,8 @@ public class YTrackAPI : YCommonAPI
return $"https://{host}/get-{codec}/{sign}/{ts}{path}";
}
public Task<YTrack?> GetAsync(string trackId)
=> GetAsync(trackId);
public async Task<YTrack?> GetAsync(string trackId)
=> (await GetAsync([trackId]))?.FirstOrDefault();
public Task<List<YTrack>?> GetAsync(IEnumerable<string> trackIds)
=> new YGetTracksBuilder(Api).ExecuteAsync(trackIds);

View File

@@ -23,7 +23,7 @@ public class YUserAPI : YCommonAPI
if (!csrfMatch.Success || !processMatch.Success)
return false;
Api.Storage.AuthToken = new YAuthToken
Api.Storage.HeaderToken = new YAuthToken
{
CsfrToken = csrfMatch.Groups[1].Value,
ProcessUuid = processMatch.Groups[1].Value
@@ -45,9 +45,7 @@ public class YUserAPI : YCommonAPI
Api.Storage.AccessToken = accessToken;
Api.Storage.Token = accessToken.AccessToken;
var shortInfo = await new YGetShortAccountInfoBuilder(Api).ExecuteAsync(null!);
if (shortInfo?.Status != YAuthStatus.Ok || string.IsNullOrWhiteSpace(shortInfo.Uid))
throw new Exception("Не удалось подтвердить авторизацию");
await AuthorizeAsync(accessToken.AccessToken);
return true;
}
@@ -96,13 +94,31 @@ public class YUserAPI : YCommonAPI
return $"https://passport.yandex.ru/auth/magic/code/?track_id={qr.TrackId}";
}
public async Task<YAuthQRStatus?> AuthorizeByQRAsync()
public async Task<YAuthQRStatus?> CheckQRStatusAsync()
{
if (Api.Storage.AuthToken == null)
throw new Exception("Сессия не инициализирована");
var status = await new YPostQrStatus(Api).ExecuteAsync(null!);
if (!string.IsNullOrWhiteSpace(status?.TrackId))
{
Api.Storage.AuthToken.SessionTrackId = status.TrackId;
}
return status;
}
public async Task<YAuthQRSession?> AuthorizeByQRAsync()
{
if (Api.Storage.AuthToken == null)
throw new Exception("Сессия не инициализирована");
if (string.IsNullOrWhiteSpace(Api.Storage.AuthToken.SessionTrackId))
throw new Exception("Токен сессии не инициализирован");
var status = await new YGetAuthLoginQRBuilder(Api).ExecuteAsync(null!);
if (status?.Status == YAuthStatus.Ok && await LoginByCookiesAsync())
if (status != null && status.DefaultUid != 0 && await LoginByCookiesAsync())
return status;
throw new AuthenticationException("Ошибка авторизации по QR");
}