private string BuildLinkForDownload(YTrackDownloadInfo mainDownloadResponse, YStorageDownloadFile storageDownload) { var path = storageDownload.Path; var host = storageDownload.Host; var ts = storageDownload.Ts; var s = storageDownload.S; var codec = mainDownloadResponse.Codec; var secret = $"XGRlBW9FXlekgbPrRHuSiA{path.Substring(1, path.Length - 1)}{s}"; var md5 = MD5.Create(); var md5Hash = md5.ComputeHash(Encoding.UTF8.GetBytes(secret)); var hmacsha1 = new HMACSHA1(); var hmasha1Hash = hmacsha1.ComputeHash(md5Hash); var sign = BitConverter.ToString(hmasha1Hash).Replace("-", "").ToLower(); var link = $"https://{host}/get-{codec}/{sign}/{ts}{path}"; return(link); }
/// <summary> /// Получение информации для формирования ссылки для загрузки /// </summary> /// <param name="storage">Хранилище</param> /// <param name="metadataInfo">Метаданные для загрузки</param> /// <returns></returns> public YStorageDownloadFile GetDownloadFileInfo(AuthStorage storage, YTrackDownloadInfo metadataInfo) { return(GetDownloadFileInfoAsync(storage, metadataInfo).GetAwaiter().GetResult()); }
/// <summary> /// Получение информации для формирования ссылки для загрузки /// </summary> /// <param name="storage">Хранилище</param> /// <param name="metadataInfo">Метаданные для загрузки</param> /// <returns></returns> public async Task <YStorageDownloadFile> GetDownloadFileInfoAsync(AuthStorage storage, YTrackDownloadInfo metadataInfo) { return(await new YStorageDownloadFileRequest(api, storage) .Create(metadataInfo.DownloadInfoUrl) .GetResponseAsync <YStorageDownloadFile>()); }