示例#1
0
 private static RegionEndpoint toRegionEndpoint(S3Region region)
 {
     return(RegionEndpoint.GetBySystemName(region.Value));
     //if (S3Region.APN1 == region)
     //    return RegionEndpoint.APNortheast1; // Tokyo
     //else if (S3Region.APN2 == region)
     //    return RegionEndpoint.APNortheast2; // Seoul
     //else if (S3Region.APS1 == region)
     //    return RegionEndpoint.APSoutheast1; // Singapore
     //else if (S3Region.APS2 == region)
     //    return RegionEndpoint.APSoutheast2; // Sydney
     //else if (S3Region.EU == region)
     //    return RegionEndpoint.EUWest1;      // Ireland
     //else if (S3Region.EUC1 == region)
     //    return RegionEndpoint.EUCentral1;   // Frankfurt
     //else if (S3Region.SAE1 == region)
     //    return RegionEndpoint.SAEast1;      // Sao Paulo
     //else if (S3Region.US == region)
     //    return RegionEndpoint.USEast1;      // Virginia
     //else if (S3Region.USW1 == region)
     //    return RegionEndpoint.USWest1;      // N.California
     //else if (S3Region.USW2 == region)
     //    return RegionEndpoint.USWest2;      // Oregon
     //else if (S3Region.CN1 == region)
     //    return RegionEndpoint.CNNorth1;     // Beijing
     //else if (S3Region.APS3 == region)
     //    return RegionEndpoint.APSouth1;     // Mumbai
     //throw new ArgumentException("region");
 }
示例#2
0
        private async Task CheckBucketExists()
        {
            if (!_bucketExist)
            {
                _bucketExist = await _s3Client.DoesS3BucketExistAsync(_bucketName);

                while (_bucketExist == false)
                {
                    S3Region s3region         = S3Region.FindValue(_config.AmazonRegion);
                    var      putBucketRequest = new PutBucketRequest {
                        BucketName   = _bucketName,
                        BucketRegion = s3region,
                    };

                    try
                    {
                        EnsureValidResponse(await _s3Client.PutBucketAsync(putBucketRequest), HttpStatusCode.OK);
                    }
                    catch (AmazonS3Exception ex)
                    {
                        if (ex.ErrorCode == "BucketAlreadyOwnedByYou")
                        {
                            break;
                        }

                        throw;
                    }
                    _bucketExist = await _s3Client.DoesS3BucketExistAsync(_bucketName);
                }
            }
        }
示例#3
0
        public static RegionEndpoint GetBucketLocation(IAmazonS3 s3Client, string bucketName)
        {
            GetBucketLocationRequest getBucketLocationRequest = new GetBucketLocationRequest()
            {
                BucketName = bucketName
            };

            GetBucketLocationResponse getBucketLocationResponse = s3Client.GetBucketLocation(getBucketLocationRequest);
            S3Region s3Region = getBucketLocationResponse.Location;

            return(toRegionEndpoint(s3Region));
        }
示例#4
0
        public static async Task DeleteAllBucketsWithPrefix(IAmazonS3 s3Client, string namePrefix)
        {
            var listBucketsResponse = await s3Client.ListBucketsAsync(new ListBucketsRequest()).ConfigureAwait(false);

            await Task.WhenAll(listBucketsResponse.Buckets.Where(x => x.BucketName.StartsWith(namePrefix, StringComparison.OrdinalIgnoreCase))
                               .Select(x => x.BucketName).Select(async bucketName =>
            {
                try
                {
                    if (!await s3Client.DoesS3BucketExistAsync(bucketName))
                    {
                        return;
                    }

                    var response = await s3Client.GetBucketLocationAsync(bucketName);
                    S3Region region;
                    switch (response.Location)
                    {
                    case "":
                        {
                            region = new S3Region("us-east-1");
                            break;
                        }

                    case "EU":
                        {
                            region = S3Region.EUW1;
                            break;
                        }

                    default:
                        region = response.Location;
                        break;
                    }

                    await s3Client.DeleteBucketAsync(new DeleteBucketRequest
                    {
                        BucketName   = bucketName,
                        BucketRegion = region
                    });
                }
                catch (AmazonS3Exception)
                {
                    Console.WriteLine($"Unable to delete bucket '{bucketName}'");
                }
            }));
        }
        internal static RegionEndpoint RegionToEndpoint(S3Region region)
        {
            RegionEndpoint regionEp;

            if (String.IsNullOrEmpty(region.Value))//By AWS doc, if empty, it is USEast1.
            {
                regionEp = RegionEndpoint.USEast1;
            }
            else
            {
                if (!RegionAliasTable.TryGetValue(region.Value, out regionEp))
                {
                    regionEp = RegionEndpoint.GetBySystemName(region.Value);
                }
            }
            return(regionEp);
        }
示例#6
0
        public static async Task Delete(IAmazonS3 s3, string endpointName, string bucketName)
        {
            await Console.Out.WriteLineAsync($"Delete bucket with name '{bucketName}' for endpoint '{endpointName}'.");

            if (await s3.DoesS3BucketExistAsync(bucketName))
            {
                var response = await s3.GetBucketLocationAsync(bucketName);

                S3Region region;
                switch (response.Location)
                {
                case "":
                {
                    region = new S3Region("us-east-1");
                    break;
                }

                case "EU":
                {
                    region = S3Region.EUW1;
                    break;
                }

                default:
                    region = response.Location;
                    break;
                }

                var deleteRequest = new DeleteBucketRequest
                {
                    BucketName   = bucketName,
                    BucketRegion = region,
                };

                await s3.DeleteBucketAsync(deleteRequest).ConfigureAwait(false);

                await Console.Out.WriteLineAsync($"Delete bucket with name '{bucketName}' for endpoint '{endpointName}'.");
            }
            else
            {
                await Console.Out.WriteLineAsync($"Bucket with name '{bucketName}' does not exist.");
            }
        }
        // Open connection.
        // Returns true on success, false on error.

        public override bool Open()
        {
            try
            {
                this.Exception = null;
                if (this.AccessKey != null)
                {
                    this.Credentials = new BasicAWSCredentials(this.AccessKey, this.SecretKey);
                }
                this.Region = S3Region.US;
                AmazonS3Config config = new AmazonS3Config {
                    ServiceURL = this.S3Endpoint
                };
                String regionName = this.S3Endpoint;

                config.RegionEndpoint = this.RegionEndpoint = RegionEndpoint.GetBySystemName(this.S3Endpoint);

                if (this.AccessKey != null)
                {
                    StorageClient = new AmazonS3Client(this.Credentials, config);   // Explicit authentication from supplied access key & secret key
                }
                else
                {
                    StorageClient = new AmazonS3Client(config);                     // Implicit authentication from EC2 role
                }
                return(true);
            }
            catch (Exception ex)
            {
                this.Exception = ex;
                if (!this.HandleErrors)
                {
                    throw ex;
                }
                return(false);
            }
        }
        public AmazonPictureService(IRepository <Picture> pictureRepository,
                                    ISettingService settingService,
                                    IWebHelper webHelper,
                                    ILogger logger,
                                    IEventPublisher eventPublisher,
                                    MediaSettings mediaSettings,
                                    GrandConfig config)
            : base(pictureRepository,
                   settingService,
                   webHelper,
                   logger,
                   eventPublisher,
                   mediaSettings)
        {
            this._config = config;

            //Arguments guard
            if (string.IsNullOrEmpty(_config.AmazonAwsAccessKeyId))
            {
                throw new ArgumentNullException("AmazonAwsAccessKeyId");
            }
            if (string.IsNullOrEmpty(_config.AmazonAwsSecretAccessKey))
            {
                throw new ArgumentNullException("AmazonAwsSecretAccessKey");
            }
            if (string.IsNullOrEmpty(_config.AmazonBucketName))
            {
                throw new ArgumentNullException("AmazonBucketName");
            }

            //Region guard
            RegionEndpoint regionEndpoint = RegionEndpoint.GetBySystemName(_config.AmazonRegion);

            if (regionEndpoint.DisplayName == "Unknown")
            {
                throw new NullReferenceException("specified Region is invalid");
            }

            //Client guard
            _s3Client = new AmazonS3Client(_config.AmazonAwsAccessKeyId, _config.AmazonAwsSecretAccessKey, regionEndpoint);
            try
            {
                EnsureValidResponse(_s3Client.ListBucketsAsync().Result, HttpStatusCode.OK);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            //Bucket guard
            _bucketName = _config.AmazonBucketName;
            var bucketExists = _s3Client.DoesS3BucketExistAsync(_bucketName).Result;

            while (bucketExists == false)
            {
                S3Region s3region         = S3Region.FindValue(_config.AmazonRegion);
                var      putBucketRequest = new PutBucketRequest
                {
                    BucketName   = _bucketName,
                    BucketRegion = s3region,
                };

                try
                {
                    EnsureValidResponse(_s3Client.PutBucketAsync(putBucketRequest).Result, HttpStatusCode.OK);
                }
                catch (AmazonS3Exception ex)
                {
                    if (ex.ErrorCode == "BucketAlreadyOwnedByYou")
                    {
                        break;
                    }

                    throw;
                }
                bucketExists = _s3Client.DoesS3BucketExistAsync(_bucketName).Result;
            }
        }
        /// <summary>
        /// Creates an Amazon S3 bucket with an ACL to control access to the
        /// bucket and the objects stored in it.
        /// </summary>
        /// <param name="client">The initialized client object used to create
        /// an Amazon S3 bucket, with an ACL applied to the bucket.
        /// </param>
        /// <param name="region">The AWS Region where the bucket will be created.</param>
        /// <param name="newBucketName">The name of the bucket to create.</param>
        /// <returns>A boolean value indicating success or failure.</returns>
        public static async Task <bool> CreateBucketUseCannedACLAsync(IAmazonS3 client, S3Region region, string newBucketName)
        {
            try
            {
                // Create a new Amazon S3 bucket with Canned ACL.
                var putBucketRequest = new PutBucketRequest()
                {
                    BucketName   = newBucketName,
                    BucketRegion = region,
                    CannedACL    = S3CannedACL.LogDeliveryWrite,
                };

                PutBucketResponse putBucketResponse = await client.PutBucketAsync(putBucketRequest);

                return(putBucketResponse.HttpStatusCode == System.Net.HttpStatusCode.OK);
            }
            catch (AmazonS3Exception ex)
            {
                Console.WriteLine($"Amazon S3 error: {ex.Message}");
            }

            return(false);
        }
 /// <summary>
 /// Sets the BucketRegion property for this request.
 /// When set, this will determine where your data will
 /// reside in S3. Refer <see cref="T:Amazon.S3.Model.S3Region"/>
 /// for a list of possible values.
 /// </summary>
 /// <param name="bucketRegion">The value that BucketRegion is set to</param>
 /// <returns>the request with the BucketRegion set</returns>
 public PutBucketRequest WithBucketRegion(S3Region bucketRegion)
 {
     BucketRegion = bucketRegion;
     return this;
 }
示例#11
0
 /// <summary>
 /// Sets the BucketRegion property for this request.
 /// Default: S3Region.US
 /// </summary>
 /// <remarks>
 /// When set, this will determine where your data will
 /// reside in S3. Refer <see cref="T:Amazon.S3.Model.S3Region"/>
 /// for a list of possible values.
 /// </remarks>
 /// <param name="bucketRegion">The region locality to use for the new bucket</param>
 /// <returns>the request with the BucketRegion set</returns>
 public PutBucketRequest WithBucketRegion(S3Region bucketRegion)
 {
     BucketRegion = bucketRegion;
     return(this);
 }
        public IRequest Marshall(PutBucketRequest putBucketRequest)
        {
            //IL_0006: Unknown result type (might be due to invalid IL or missing references)
            //IL_000c: Expected O, but got Unknown
            //IL_019e: Unknown result type (might be due to invalid IL or missing references)
            IRequest val = new DefaultRequest(putBucketRequest, "AmazonS3");

            val.set_HttpMethod("PUT");
            if (putBucketRequest.IsSetCannedACL())
            {
                val.get_Headers().Add("x-amz-acl", putBucketRequest.CannedACL.get_Value());
            }
            else if (putBucketRequest.Grants != null && putBucketRequest.Grants.Count > 0)
            {
                ConvertPutWithACLRequest(putBucketRequest, val);
            }
            string resourcePath = "/" + S3Transforms.ToStringValue(putBucketRequest.BucketName);

            val.set_ResourcePath(resourcePath);
            StringWriter stringWriter = new StringWriter(CultureInfo.InvariantCulture);

            using (XmlWriter xmlWriter = XmlWriter.Create(stringWriter, new XmlWriterSettings
            {
                Encoding = Encoding.UTF8,
                OmitXmlDeclaration = true
            }))
            {
                string   text         = null;
                S3Region bucketRegion = putBucketRequest.BucketRegion;
                if (bucketRegion != null && !string.IsNullOrEmpty(bucketRegion.get_Value()))
                {
                    text = bucketRegion.get_Value();
                }
                else if (!string.IsNullOrEmpty(putBucketRequest.BucketRegionName))
                {
                    if (putBucketRequest.BucketRegionName == "eu-west-1")
                    {
                        text = "EU";
                    }
                    else if (putBucketRequest.BucketRegionName != "us-east-1")
                    {
                        text = putBucketRequest.BucketRegionName;
                    }
                }
                if (text != null)
                {
                    xmlWriter.WriteStartElement("CreateBucketConfiguration", "");
                    xmlWriter.WriteElementString("LocationConstraint", "", text);
                    xmlWriter.WriteEndElement();
                }
            }
            try
            {
                string text2 = stringWriter.ToString();
                val.set_Content(Encoding.UTF8.GetBytes(text2));
                val.get_Headers()["Content-Type"] = "application/xml";
                string value = AmazonS3Util.GenerateChecksumForContent(text2, fBase64Encode: true);
                val.get_Headers()["Content-MD5"] = value;
                return(val);
            }
            catch (EncoderFallbackException ex)
            {
                throw new AmazonServiceException("Unable to marshall request to XML", (Exception)ex);
            }
        }