using System.Net; using YandexMusic.API.Models.Account; namespace YandexMusic.API.Common; /// /// Хранилище данных авторизации. Не содержит HTTP-зависимостей. /// public class AuthStorage { private CookieContainer _cookieContainer; public AuthStorage(CookieContainer cookieContainer) { _cookieContainer = cookieContainer; } public CookieContainer CookieContainer => _cookieContainer; /// /// Флаг, указывающий, авторизован ли пользователь. /// public bool IsAuthorized { get; internal set; } /// /// Идентификатор устройства (используется в заголовках). /// public string DeviceId { get; set; } = "csharp"; /// /// OAuth-токен для доступа к API. /// public string Token { get; internal set; } = string.Empty; /// /// Информация об аккаунте пользователя. /// public YAccount User { get; internal set; } = new(); /// /// Временный токен доступа (используется в некоторых сценариях авторизации). /// public YAccessToken AccessToken { get; internal set; } = new(); /// /// Внутренние данные авторизации (CSRF, track_id и т.д.). /// public YAuthToken? HeaderToken { get; set; } = new(); /// /// Внутренние данные авторизации (CSRF, track_id и т.д.). /// public YAuthToken? AuthToken { get; set; } = new(); /// /// Страна, используемая для авторизации (по умолчанию "ru"). Может влиять на язык интерфейса и доступные методы авторизации. /// public object Country { get; set; } = "ru"; /// /// Устанавливает флаг авторизации и сохраняет информацию об аккаунте. /// internal void SetAuthorized(YAccount user, string token) { User = user ?? throw new ArgumentNullException(nameof(user)); Token = token ?? throw new ArgumentNullException(nameof(token)); IsAuthorized = true; } /// /// Сбрасывает состояние авторизации. /// internal void ResetAuthorization() { User = new YAccount(); Token = string.Empty; AccessToken = new YAccessToken(); AuthToken = new YAuthToken(); IsAuthorized = false; } }