Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        /// <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);
            }
        }