/// <summary>
        ///     Search for new update packages with the given options
        /// </summary>
        /// <returns>Return the result of the update search</returns>
        public async Task <UpdatePackageSearchResult> SearchForNewUpdatePackagesAsync()
        {
            var versionFilter = VersionFilter?.GetSupportedPrereleases();

            if (versionFilter?.Length > 10)
            {
                throw new ArgumentException("A maximum of 10 version filters is allowed.");
            }

            var httpClient = _httpClient.Value;
            var version    = VersionProvider.GetVersion();

            HttpClientSetHeaders(version);

            try
            {
                var uri = new Uri($"packages/{Uri.EscapeDataString(version.ToString())}/check", UriKind.Relative);

                var platforms = PlatformProvider?.GetEncodedPlatforms();
                if (platforms != null)
                {
                    uri = uri.AddQueryParameters("platforms", platforms.Value.ToString());
                }

                if (versionFilter?.Length > 0)
                {
                    uri = uri.AddQueryParameters("versionFilter",
                                                 Uri.EscapeDataString(JsonConvert.SerializeObject(versionFilter)));
                }

                var response = await httpClient.GetAsync(uri);

                if (!response.IsSuccessStatusCode)
                {
                    throw await UpdateSystemResponseExtensions.GetResponseException(response, this);
                }

                var result = await response.Content.ReadAsStringAsync();

                var jwtResponse =
                    JsonConvert.DeserializeObject <JwtResponse <UpdatePackageSearchResult> >(result,
                                                                                             _jsonSerializerSettings);

                HttpClientSetJwt(jwtResponse);
                var searchResult = jwtResponse.Result;
                searchResult.Initialize(this);

                if (!searchResult.IsUpdateAvailable)
                {
                    Settings?.NoUpdatesFoundCleanup(ProjectId);
                }

                return(searchResult);
            }
            finally
            {
                httpClient.DefaultRequestHeaders.AcceptLanguage.Clear();
            }
        }
Esempio n. 2
0
        public void CanAddQueryParametersFromNameValueCollectionWithRepeatedKeys()
        {
            // Arrange
            Uri url1 = new Uri("http://dr.dk");
            Uri url2 = new Uri("http://dr.dk?x=john&y=wide");

            NameValueCollection p = new NameValueCollection();

            p["x"] = "1";
            p.Add("y", "hello");
            p.Add("y", "world");

            // Act
            url1 = url1.AddQueryParameters(p);
            url2 = url2.AddQueryParameters(p);

            // Assert
            NameValueCollection pcoll1 = HttpUtility.ParseQueryString(url1.Query);
            NameValueCollection pcoll2 = HttpUtility.ParseQueryString(url2.Query);

            Assert.AreEqual(2, pcoll1.Count);
            Assert.AreEqual("1", pcoll1["x"]);
            Assert.AreEqual("hello,world", pcoll1["y"]);

            Assert.AreEqual(2, pcoll2.Count);
            Assert.AreEqual("john,1", pcoll2["x"]);
            Assert.AreEqual("wide,hello,world", pcoll2["y"]);
        }
        /// <summary>
        ///     Download information to repair the current installation
        /// </summary>
        /// <returns>Return the information required by the downloader to scan the current files and find differences</returns>
        public async Task <UpdatePackageFilebase> RepairAsync()
        {
            var version = VersionProvider.GetVersion();

            HttpClientSetHeaders(version);

            var uri = new Uri($"packages/{Uri.EscapeDataString(version.ToString())}/files", UriKind.Relative);

            var platforms = PlatformProvider?.GetEncodedPlatforms();

            if (platforms != null)
            {
                uri = uri.AddQueryParameters("platforms", platforms.Value.ToString());
            }

            var response = await _httpClient.Value.GetAsync(uri);

            if (!response.IsSuccessStatusCode)
            {
                throw await UpdateSystemResponseExtensions.GetResponseException(response, this);
            }

            var result = await response.Content.ReadAsStringAsync();

            var jwtResponse =
                JsonConvert.DeserializeObject <JwtResponse <List <SignedFileInformation> > >(result,
                                                                                             _jsonSerializerSettings);

            HttpClientSetJwt(jwtResponse);
            return(new UpdatePackageFilebase(jwtResponse.Result, this, version));
        }
Esempio n. 4
0
        public void ItDoesNotDoAnythingWhenNotGivenParameters()
        {
            // g
            var baseUri = new Uri("http://www.example.com/");

            // w
            var actual = baseUri.AddQueryParameters(new Dictionary <string, string>());

            // t
            actual.ToString().Should().Be("http://www.example.com/");
        }
Esempio n. 5
0
        public void ItCanEscapeParameters()
        {
            // g
            var baseUri = new Uri("http://www.example.com/");

            // w
            var actual = baseUri.AddQueryParameters(new Dictionary <string, string> {
                { "query", "; DELETE * FROM Users" }
            });

            // t
            actual.ToString().Should().Be("http://www.example.com/?query=%3B DELETE * FROM Users");
        }
Esempio n. 6
0
        public void ItCanAddSeveralQueryParameters()
        {
            // g
            var baseUri = new Uri("http://www.example.com/");

            // w
            var actual = baseUri.AddQueryParameters(new Dictionary <string, string> {
                { "query", "param" }, { "second", "param" }
            });

            // t
            actual.ToString().Should().Be("http://www.example.com/?query=param&second=param");
        }
Esempio n. 7
0
        public void ItCanAddAQueryParameterWithoutValue()
        {
            // g
            var baseUri = new Uri("http://www.example.com/");

            // w
            var actual = baseUri.AddQueryParameters(new Dictionary <string, string> {
                { "query", "" }
            });

            // t
            actual.ToString().Should().Be("http://www.example.com/?query=");
        }
Esempio n. 8
0
        public void ItCanAddAQueryParameterMultipleTimes()
        {
            // g
            var baseUri = new Uri("http://www.example.com/");

            // w
            var temp = baseUri.AddQueryParameters(new Dictionary <string, string> {
                { "query", "param" }
            });
            var actual = temp.AddQueryParameters(new Dictionary <string, string> {
                { "foo", "bar" }
            });

            // t
            actual.ToString().Should().Be("http://www.example.com/?query=param&foo=bar");
        }
Esempio n. 9
0
        private Uri buildURL(HttpMethod method, string path, Dictionary <string, string> queryParams = null)
        {
            UriBuilder builder = new UriBuilder()
            {
                Scheme = !method.Equals(HttpMethod.Head) ? Constants.HttpsScheme : Constants.HttpScheme,
                Host   = this.accountName + Constants.DnsSuffix,
                Path   = $"{this.fileSystemName}/{path}"
            };

            Uri url = builder.Uri;

            if (queryParams != null)
            {
                url = url.AddQueryParameters(queryParams);
            }

            return(url);
        }
Esempio n. 10
0
        public static Uri BindByName(this UriTemplate template, Uri baseUri, IDictionary <string, string> parameters)
        {
            IDictionary <string, string> unusedParameters = new Dictionary <string, string>(parameters);

            foreach (var p in template.GetParameterNames())
            {
                if (parameters.TryGetValue(p, out string v))
                {
                    template = template.AddParameter(p, v);
                    unusedParameters.Remove(p);
                }
            }

            var url = new Uri(baseUri, template.Resolve());

            url = url.AddQueryParameters(unusedParameters);

            return(url);
        }
Esempio n. 11
0
        private void CanAddQueryParametersFromAny(object p)
        {
            // Arrange
            Uri url1 = new Uri("http://dr.dk");
            Uri url2 = new Uri("http://dr.dk?q=world");
            Uri url3 = new Uri("http://dr.dk?x=5&q=web");
            Uri url4 = new Uri("http://dr.dk?q=world&q=wide&x=8");

            // Act
            url1 = url1.AddQueryParameters(p);
            url2 = url2.AddQueryParameters(p);
            url3 = url3.AddQueryParameters(p);
            url4 = url4.AddQueryParameters(p);

            // Assert
            NameValueCollection pcoll1 = HttpUtility.ParseQueryString(url1.Query);
            NameValueCollection pcoll2 = HttpUtility.ParseQueryString(url2.Query);
            NameValueCollection pcoll3 = HttpUtility.ParseQueryString(url3.Query);
            NameValueCollection pcoll4 = HttpUtility.ParseQueryString(url4.Query);

            Assert.AreEqual(2, pcoll1.Count);
            Assert.AreEqual("1", pcoll1["x"]);
            Assert.AreEqual("hello", pcoll1["y"]);

            Assert.AreEqual(3, pcoll2.Count);
            Assert.AreEqual("1", pcoll2["x"]);
            Assert.AreEqual("hello", pcoll2["y"]);
            Assert.AreEqual("world", pcoll2["q"]);

            Assert.AreEqual(3, pcoll3.Count);
            Assert.AreEqual("5,1", pcoll3["x"]);
            Assert.AreEqual("hello", pcoll3["y"]);
            Assert.AreEqual("web", pcoll3["q"]);

            Assert.AreEqual(3, pcoll4.Count);
            Assert.AreEqual("8,1", pcoll4["x"]);
            Assert.AreEqual("hello", pcoll4["y"]);
            Assert.AreEqual("world,wide", pcoll4["q"]);
        }
Esempio n. 12
0
        public void TestAddQuery(Uri uri, string paramName, string paramValue, Uri result)
        {
            var actual = uri.AddQueryParameters(paramName, paramValue);

            Assert.Equal(result, actual);
        }