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();
///
/// Устанавливает флаг авторизации и сохраняет информацию об аккаунте.
///
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;
}
}