示例#1
0
        public Uri Sign(SignatureRequest arg)
        {
            if (arg == null)
            {
                throw new ArgumentNullException(nameof(arg));
            }

            if (!arg.Algorithm.Equals(AlgorithmName, StringComparison.OrdinalIgnoreCase))
            {
                throw new ArgumentException($"Algorithm \"{arg.Algorithm}\" is not supported", nameof(arg));
            }

            var urlBuilder = new UrlBuilder();

            urlBuilder.AddAbsoluteUri(arg.Url.AbsoluteUri);
            urlBuilder.AddQueryParam(SignatureRequest.AlgorithmKey, canonicalStringBuider.BuildAlgorithm(arg));
            urlBuilder.AddQueryParam(SignatureRequest.CredentialKey, canonicalStringBuider.BuildCredentials(arg));
            urlBuilder.AddQueryParam(SignatureRequest.DateKey, canonicalStringBuider.BuildTimestamp(arg));
            urlBuilder.AddQueryParam(SignatureRequest.SignedHeadersKey, canonicalStringBuider.BuildSignedHeaders(arg));

            var stringToSign = BuildStringToSign(arg);
            var signature    = hashCalculator.GetStringToSignHash(
                stringToSign,
                arg.Secret);

            urlBuilder.AddQueryParam(SignatureRequest.SignatureKey, signature);

            return(urlBuilder.ToUri(true));
        }
示例#2
0
        public void AddAbsoluteUri_Without_Query_String_Should_Provide_The_Same_Uri()
        {
            underTest.AddAbsoluteUri("http://google.com?q=dragon");

            underTest.ToUri().ToString().Should().Be("http://google.com/?q=dragon");
        }