Пример #1
0
        private ServiceRequest BuildRequest()
        {
            var conf    = OssUtils.GetClientConfiguration(Client);
            var request = new ServiceRequest
            {
                Method       = Method,
                Endpoint     = OssUtils.MakeBucketEndpoint(Endpoint, Bucket, conf),
                ResourcePath = OssUtils.MakeResourcePath(Key)
            };

            foreach (var p in Parameters)
            {
                request.Parameters.Add(p.Key, p.Value);
            }

            var adjustedTime = DateTime.UtcNow.AddSeconds(conf.TickOffset);

            request.Headers[HttpHeaders.Date] = DateUtils.FormatRfc822Date(adjustedTime);
            if (!Headers.ContainsKey(HttpHeaders.ContentType))
            {
                request.Headers[HttpHeaders.ContentType] = string.Empty;
            }
            foreach (var h in Headers)
            {
                request.Headers.Add(h.Key, h.Value);
            }
            if (Context.Credentials.UseToken)
            {
                request.Headers[HttpHeaders.SecurityToken] = Context.Credentials.SecurityToken;
            }

            request.Content = Content;

            return(request);
        }
Пример #2
0
        /// <inheritdoc/>
        public Uri GeneratePresignedUri(GeneratePresignedUriRequest generatePresignedUriRequest)
        {
            ThrowIfNullRequest(generatePresignedUriRequest);

            var creds         = _credsProvider.GetCredentials();
            var accessId      = creds.AccessId;
            var accessKey     = creds.AccessKey;
            var securityToken = creds.SecurityToken;
            var useToken      = creds.UseToken;
            var bucketName    = generatePresignedUriRequest.BucketName;
            var key           = generatePresignedUriRequest.Key;

            const long ticksOf1970 = 621355968000000000;
            var        expires     = ((generatePresignedUriRequest.Expiration.ToUniversalTime().Ticks - ticksOf1970) / 10000000L)
                                     .ToString(CultureInfo.InvariantCulture);
            var resourcePath = OssUtils.MakeResourcePath(key);

            var request = new ServiceRequest();
            var conf    = OssUtils.GetClientConfiguration(_serviceClient);

            request.Endpoint     = OssUtils.MakeBucketEndpoint(_endpoint, bucketName, conf);
            request.ResourcePath = resourcePath;

            switch (generatePresignedUriRequest.Method)
            {
            case SignHttpMethod.Get:
                request.Method = HttpMethod.Get;
                break;

            case SignHttpMethod.Put:
                request.Method = HttpMethod.Put;
                break;

            default:
                throw new ArgumentException("Unsupported http method.");
            }

            request.Headers.Add(HttpHeaders.Date, expires);
            if (!string.IsNullOrEmpty(generatePresignedUriRequest.ContentType))
            {
                request.Headers.Add(HttpHeaders.ContentType, generatePresignedUriRequest.ContentType);
            }
            if (!string.IsNullOrEmpty(generatePresignedUriRequest.ContentMd5))
            {
                request.Headers.Add(HttpHeaders.ContentMd5, generatePresignedUriRequest.ContentMd5);
            }

            foreach (var pair in generatePresignedUriRequest.UserMetadata)
            {
                request.Headers.Add(OssHeaders.OssUserMetaPrefix + pair.Key, pair.Value);
            }

            if (generatePresignedUriRequest.ResponseHeaders != null)
            {
                generatePresignedUriRequest.ResponseHeaders.Populate(request.Parameters);
            }

            foreach (var param in generatePresignedUriRequest.QueryParams)
            {
                request.Parameters.Add(param.Key, param.Value);
            }

            if (useToken)
            {
                request.Parameters.Add(RequestParameters.SECURITY_TOKEN, securityToken);
            }

            var canonicalResource = "/" + (bucketName ?? "") + ((key != null ? "/" + key : ""));
            var httpMethod        = generatePresignedUriRequest.Method.ToString().ToUpperInvariant();

            var canonicalString =
                SignUtils.BuildCanonicalString(httpMethod, canonicalResource, request /*, expires*/);
            var signature = ServiceSignature.Create().ComputeSignature(accessKey, canonicalString);

            IDictionary <string, string> queryParams = new Dictionary <string, string>();

            queryParams.Add(RequestParameters.EXPIRES, expires);
            queryParams.Add(RequestParameters.OSS_ACCESS_KEY_ID, accessId);
            queryParams.Add(RequestParameters.SIGNATURE, signature);
            foreach (var param in request.Parameters)
            {
                queryParams.Add(param.Key, param.Value);
            }

            var queryString = HttpUtils.ConbineQueryString(queryParams);
            var uriString   = request.Endpoint.ToString();

            if (!uriString.EndsWith("/"))
            {
                uriString += "/";
            }
            uriString += resourcePath + "?" + queryString;

            return(new Uri(uriString));
        }
        public void OssUtilsTest()
        {
            var conf = new ClientConfiguration();

            Assert.AreEqual(OssUtils.IsBucketNameValid(""), false);

            var str = OssUtils.MakeResourcePath(new Uri("http://192.168.1.1"), "bucket", "key/abc/");

            Assert.AreEqual(str, "bucket/key/abc/");

            //cname
            conf.IsCname = true;
            var uri = OssUtils.MakeBucketEndpoint(new Uri("http://endpoint"), "bucket", conf);

            Assert.AreEqual(uri.ToString(), "http://endpoint/");

            //ip endpoint & endpoint port
            conf.IsCname = false;
            uri          = OssUtils.MakeBucketEndpoint(new Uri("http://192.168.1.1"), "bucket", conf);
            Assert.AreEqual(uri.ToString(), "http://192.168.1.1/");

            uri = OssUtils.MakeBucketEndpoint(new Uri("http://192.168.1.1:3128"), "bucket", conf);
            Assert.AreEqual(uri.ToString(), "http://192.168.1.1:3128/");

            //bucket
            conf.IsCname = false;
            uri          = OssUtils.MakeBucketEndpoint(new Uri("http://endpoint"), null, conf);
            Assert.AreEqual(uri.ToString(), "http://endpoint/");

            conf.IsCname = false;
            uri          = OssUtils.MakeBucketEndpoint(new Uri("http://endpoint"), "bucket", conf);
            Assert.AreEqual(uri.ToString(), "http://bucket.endpoint/");

            //TrimQuotes
            Assert.AreEqual(OssUtils.TrimQuotes("\"test\""), "test");
            Assert.AreEqual(OssUtils.TrimQuotes("test\""), "test");
            Assert.AreEqual(OssUtils.TrimQuotes("\"test"), "test");
            Assert.AreEqual(OssUtils.TrimQuotes(null), null);

            //ComputeContentCrc64
            var content = new MemoryStream(Encoding.ASCII.GetBytes(""));

            str = OssUtils.ComputeContentCrc64(content, 1);
            Assert.AreEqual(str, string.Empty);

            //JoinETag
            var etagList = new List <string>();

            etagList.Add("etag1");
            etagList.Add("etag2");
            str = OssUtils.JoinETag(etagList);
            Assert.AreEqual(str, "etag1, etag2");

            //GetResourcePathFromSignedUrl
            str = OssUtils.GetResourcePathFromSignedUrl(new Uri("http://endpoint/key"));
            Assert.AreEqual(str, "key");

            str = OssUtils.GetResourcePathFromSignedUrl(new Uri("http://endpoint"));
            Assert.AreEqual(str, "");

            //GetParametersFromSignedUrl
        }