Beispiel #1
0
        public void GetDownloadFileInfo_ValidData_True()
        {
            downloadInfo.Count.Should().BePositive();

            downloadFile = Fixture.API.TrackAPI.GetDownloadFileInfo(Fixture.Storage, downloadInfo.First(m => m.Codec == "mp3"));

            downloadFile.Path.Should().NotBeNullOrEmpty();
        }
Beispiel #2
0
        private string BuildLinkForDownload(YTrackDownloadInfoResponse mainDownloadResponse,
                                            YStorageDownloadFileResponse storageDownloadResponse)
        {
            var path  = storageDownloadResponse.Path;
            var host  = storageDownloadResponse.Host;
            var ts    = storageDownloadResponse.Ts;
            var s     = storageDownloadResponse.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);
        }
        public async Task <YStorageDownloadFileResponse> GetDownloadFilInfoAsync(YTrackDownloadInfoResponse metadataInfo, long time)
        {
            var request = new YStorageDownloadFileRequest(_httpContext).Create(metadataInfo.Src, time, User.Login);
            var data    = default(JToken);

            using (var response = (HttpWebResponse)await request.GetResponseAsync())
            {
                var result = "";

                using (var stream = response.GetResponseStream())
                {
                    var reader = new StreamReader(stream);

                    result = await reader.ReadToEndAsync();
                }

                data = JToken.Parse(result);

                _httpContext.Cookies.Add(response.Cookies);
            }

            return(YStorageDownloadFileResponse.FromJson(data));
        }