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)); }
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"); }