/// <summary> /// Add the appropriate Authorization header to the WebRequest /// </summary> private void AddAuthorizationHeader(WebRequest webRequest, string bucket, string key, SortedList query) { if (webRequest.Headers[ThreeSharpUtils.ALTERNATIVE_DATE_HEADER] == null) { webRequest.Headers.Add(ThreeSharpUtils.ALTERNATIVE_DATE_HEADER, ThreeSharpUtils.GetHttpDate()); } string canonicalString = ThreeSharpUtils.MakeCanonicalString(bucket, key, query, webRequest); string encodedCanonical = ThreeSharpUtils.Encode(config.AwsSecretAccessKey, canonicalString, false); webRequest.Headers.Add(HttpRequestHeader.Authorization, "AWS " + config.AwsAccessKeyID + ":" + encodedCanonical); }
/// <summary> /// Generates a URL to access an object in a bucket /// </summary> public UrlGetResponse UrlGet(UrlGetRequest request) { UrlGetResponse response = new UrlGetResponse(); long expires = (ThreeSharpUtils.CurrentTimeMillis() + request.ExpiresIn) / 1000; string canonicalString = ThreeSharpUtils.MakeCanonicalString(request.Method, request.BucketName, request.Key, null, null, expires.ToString()); string encodedCanonical = ThreeSharpUtils.Encode(config.AwsSecretAccessKey, canonicalString, true); StringBuilder builder = new StringBuilder(); if (config.IsSecure) { builder.Append("https://"); } else { builder.Append("http://"); } builder.Append(ThreeSharpUtils.BuildUrlBase(config.Server, config.Port, request.BucketName, config.Format)); if (!String.IsNullOrEmpty(request.BucketName) && !String.IsNullOrEmpty(request.Key)) { builder.Append(request.Key); } request.QueryList.Add("Signature", encodedCanonical); request.QueryList.Add("Expires", "" + expires); request.QueryList.Add("AWSAccessKeyId", config.AwsAccessKeyID); builder.Append(ThreeSharpUtils.ConvertQueryListToQueryString(request.QueryList)); String url = builder.ToString(); byte[] urlBytes = (new ASCIIEncoding()).GetBytes(url); response.DataStream = new MemoryStream(urlBytes.Length); response.DataStream.Write(urlBytes, 0, urlBytes.Length); response.DataStream.Position = 0; response.BucketName = request.BucketName; response.Key = request.Key + "-URL"; response.Method = request.Method; response.TransferInfo = new TransferInfo(response); lock (this.statistics) { this.statistics.AddTransferInfo(response.TransferInfo); } return(response); }
/// <summary> /// Add the appropriate Authorization header to the WebRequest /// </summary> /// private void AddAuthorizationHeader(WebRequest webRequest, Request request) { if (webRequest.Headers[ThreeSharpUtils.ALTERNATIVE_DATE_HEADER] == null) { webRequest.Headers.Add(ThreeSharpUtils.ALTERNATIVE_DATE_HEADER, ThreeSharpUtils.GetHttpDate()); } if (request.ServiceType == ThreeSharpServiceType.AWS100) { Encoding ae = new UTF8Encoding(); HMACSHA1 signature = new HMACSHA1(ae.GetBytes(config.AwsSecretAccessKey.ToCharArray())); string b64 = Convert.ToBase64String(signature.ComputeHash(ae.GetBytes(webRequest.Headers[ThreeSharpUtils.ALTERNATIVE_DATE_HEADER].ToCharArray()))); webRequest.Headers.Add(HttpRequestHeader.Authorization, "AWS" + " " + config.AwsAccessKeyID + ":" + b64); } else { string canonicalString = ThreeSharpUtils.MakeCanonicalString(request.BucketName, request.Key, request.QueryList, webRequest); string encodedCanonical = ThreeSharpUtils.Encode(config.AwsSecretAccessKey, canonicalString, false); webRequest.Headers.Add(HttpRequestHeader.Authorization, "AWS " + config.AwsAccessKeyID + ":" + encodedCanonical); } }