Inheritance: IBucket
Exemple #1
0
 private static bool FetchDataFromResponse(HttpWebResponse response, Bucket.ObjectHead objectHead, bool withData)
 {
     if (objectHead == null)
         return false;
     objectHead.Size = response.ContentLength;
     objectHead.ContentType = response.ContentType;
     objectHead.ETag = response.Headers["ETag"];
     objectHead.LastModified = response.LastModified;
     if (withData)
     {
         objectHead.Content = new byte[objectHead.Size];
         var read = (long)0;
         var stream = response.GetResponseStream();
         if (stream != null)
         {
             while (read < objectHead.Size)
             {
                 var toread = (int) ((objectHead.Size - read)%4048);
                 read += stream.Read(objectHead.Content, 0, toread);
             }
             return true;
         }
     }
     return false;
 }
Exemple #2
0
 public static IBucket FromXml(XElement element, SharpGsClient connector)
 {
     var bucket = new Bucket(connector)
                      {
                          Name = element.Descendants("Name").First().Value,
                          CreationDate = DateTime.Parse(element.Descendants("CreationDate").First().Value)
                      };
     return bucket;
 }
Exemple #3
0
        public string Request(string authValue, DateTime date, Stream content, string contentType, Bucket.ObjectHead objectHead, bool withData)
        {
            try
            {
                var request = CreateRequest(authValue, date, content, contentType);

                using (var response = (HttpWebResponse)request.GetResponse())
                {
                    if (response.StatusCode == HttpStatusCode.OK && FetchDataFromResponse(response, objectHead, withData))
                        return String.Empty;
                    return StreamToString(response.GetResponseStream());
                }
            }
            catch (WebException exception)
            {
                return StreamToString(exception.Response.GetResponseStream());
            }
        }
Exemple #4
0
 internal XDocument Request(RequestMethod requestMethod = RequestMethod.GET, string bucket = null, string path = null, byte[] content = null, string contentType = null, Bucket.ObjectHead objectHead = null, bool withData = false, string parameters = null)
 {
     var stream = content == null ? null : new MemoryStream(content);
     try
     {
         return RequestStream(requestMethod, bucket, path, stream, contentType, objectHead, withData, parameters);
     }
     finally
     {
         if (stream != null)
             stream.Close();
     }
 }
Exemple #5
0
        internal XDocument RequestStream(RequestMethod requestMethod = RequestMethod.GET, string bucket = null, string path = null, Stream content = null, string contentType = null, Bucket.ObjectHead objectHead = null, bool withData = false, string parameters = null)
        {
            var contentTypeFixed = contentType ?? @"application/xml";
            var dateO = DateTime.UtcNow;
            var date = dateO.ToString(@"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'", CultureInfo.GetCultureInfo("EN-US"));

            var canonicalHeaders = SyndicateCanonicalHeaders(requestMethod,
                                                             content == null
                                                                 ? null
                                                                 : Convert.ToBase64String(
                                                                     MD5.Create().ComputeHash(content)),
                                                             contentTypeFixed,
                                                             date);
            var canonicalResource = SyndicateCanonicalResource(requestMethod, bucket, path);

            var signatureOrigin = String.Format("{0}{1}", canonicalHeaders, canonicalResource);
            var signature =
                Convert.ToBase64String(
                    new HMACSHA1(Encoding.UTF8.GetBytes(AuthSecret)).ComputeHash(Encoding.UTF8.GetBytes(signatureOrigin)));

            var api = new RestApiClient(ConnectionUrl(requestMethod, bucket, path, parameters), requestMethod, WebProxy);
            if (objectHead != null)
                objectHead.Key = path;
            var result = api.Request(SyndicateAuthValue(AuthKey, signature), dateO, content, contentTypeFixed,
                                     objectHead, withData);
            if (String.IsNullOrEmpty(result))
                return null;
            var responce = XDocument.Parse(FilterResponse(result));
            var error = responce.Descendants(@"Error").FirstOrDefault();
            if (error == null)
                return responce;
            throw error.FindException();
        }