Example #1
0
        public static S3DeveloperOptions Parse(string devOptions)
        {
            var options = new S3DeveloperOptions();

            if (string.IsNullOrWhiteSpace(devOptions))
            {
                return(options);
            }
            var optionPairs = devOptions.Split(new[] { '&' }, StringSplitOptions.RemoveEmptyEntries);

            foreach (var optionPair in optionPairs)
            {
                var optionPairParts = optionPair.Split(new[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                if (optionPairParts.Length == 2)
                {
                    MapToOption(options, optionPairParts[0].Trim().ToLowerInvariant(), optionPairParts[1].Trim());
                }
                else
                {
                    throw new ArgumentException(
                              string.Format(
                                  "Unable to parse developer options which should be in the form of 'option=value&nextOption=nextValue'. The option '{0}' was not properly constructed",
                                  optionPair));
                }
            }
            return(options);
        }
Example #2
0
        public override OperationResult Deprovision(AddonDeprovisionRequest request)
        {
            string connectionData = request.ConnectionData;
            // changing to overloaded constructor - 5/22/14
            var           deprovisionResult = new ProvisionAddOnResult(connectionData);
            AddonManifest manifest          = request.Manifest;
            string        devOptions        = request.DeveloperOptions;

            try
            {
                AmazonS3Client client;
                var            conInfo          = ConnectionInfo.Parse(connectionData);
                var            developerOptions = S3DeveloperOptions.Parse(devOptions);
                // heh, need to know which bucket to remove...
                developerOptions.BucketName = conInfo.BucketName;

                var establishClientResult = EstablishClient(manifest, developerOptions, out client);
                if (!establishClientResult.IsSuccess)
                {
                    deprovisionResult.EndUserMessage = establishClientResult.EndUserMessage;
                    return(deprovisionResult);
                }

                var response =
                    client.DeleteBucket(new DeleteBucketRequest
                {
                    BucketName = developerOptions.BucketName
                });
                // 5/22/14 fixing amazon aws deprecation
                if (response.HttpStatusCode.Equals(HttpStatusCode.OK))
                {
                    var verificationResponse = client.ListBuckets(new ListBucketsRequest());
                    // 5/22/14 fixing amazaon aws deprecration
                    if (verificationResponse.Buckets.All(x => x.BucketName != conInfo.BucketName))
                    {
                        deprovisionResult.IsSuccess      = true;
                        deprovisionResult.EndUserMessage = "Successfully deleted bucket: " + conInfo.BucketName;
                    }
                }
                else
                {
                    // error occurred during deletion
                    deprovisionResult.EndUserMessage = "Error during deprovision. Check S3 to ensure bucket was deleted.";
                }
            }
            catch (Exception e)
            {
                deprovisionResult.EndUserMessage = e.Message + e.StackTrace;
            }

            return(deprovisionResult);
        }
 private static void MapToOption(S3DeveloperOptions existingOptions, string key, string value)
 {
     if ("bucketname".Equals(key))
     {
         existingOptions.BucketName = value;
         return;
     }
     if ("bucketregion".Equals(key))
     {
         existingOptions.BucketRegion = value;
         return;
     }
     if ("bucketregionname".Equals(key))
     {
         existingOptions.BucketRegionName = value;
         return;
     }
     if ("cannedacl".Equals(key))
     {
         existingOptions.CannedAcl = value;
         return;
     }
     if ("useclientregion".Equals(key))
     {
         bool result;
         if (!bool.TryParse(value, out result))
         {
             throw new Exception("Cannot parse boolean value.");
         }
         existingOptions.UseClientRegion = result;
         return;
     }
     if ("grants".Equals(key))
     {
         existingOptions.Grants.Add(value);
         return;
     }
     if ("regionendpoint".Equals(key))
     {
         existingOptions.RegionEndpont = value;
     }
     // else option is not found, throw exception
     throw new ArgumentException(string.Format("The developer option '{0}' was not expected and is not understood.", key));
 }
Example #4
0
 private static void MapToOption(S3DeveloperOptions existingOptions, string key, string value)
 {
     if ("bucketname".Equals(key))
     {
         existingOptions.BucketName = value;
         return;
     }
     if ("bucketregion".Equals(key))
     {
         existingOptions.BucketRegion = value;
         return;
     }
     if ("bucketregionname".Equals(key))
     {
         existingOptions.BucketRegionName = value;
         return;
     }
     if ("cannedacl".Equals(key))
     {
         existingOptions.CannedAcl = value;
         return;
     }
     if ("useclientregion".Equals(key))
     {
         bool result;
         if (!bool.TryParse(value, out result))
         {
             throw new Exception("Cannot parse boolean value.");
         }
         existingOptions.UseClientRegion = result;
         return;
     }
     if ("grants".Equals(key))
     {
         existingOptions.Grants.Add(value);
         return;
     }
     if ("regionendpoint".Equals(key))
     {
         existingOptions.RegionEndpont = value;
     }
     // else option is not found, throw exception
     throw new ArgumentException(string.Format("The developer option '{0}' was not expected and is not understood.", key));
 }
Example #5
0
        private OperationResult EstablishClient(AddonManifest manifest, S3DeveloperOptions devOptions, out AmazonS3Client client)
        {
            OperationResult result;

            bool requireCreds;
            var  manifestprops   = manifest.GetProperties().ToDictionary(x => x.Key, x => x.Value);
            var  accessKey       = manifestprops["AWSClientKey"];
            var  secretAccessKey = manifestprops["AWSSecretKey"];

            var prop =
                manifest.Properties.First(
                    p => p.Key.Equals("requireDevCredentials", StringComparison.InvariantCultureIgnoreCase));

            if (bool.TryParse(prop.Value, out requireCreds) && requireCreds)
            {
                if (!ValidateDevCreds(devOptions))
                {
                    client = null;
                    result = new OperationResult
                    {
                        IsSuccess      = false,
                        EndUserMessage =
                            "The add on requires that developer credentials are specified but none were provided."
                    };
                    return(result);
                }

                //accessKey = devOptions.AccessKey;
                //secretAccessKey = devOptions.SecretAccessKey;
                //regionEndpoint = devOptions.RegionEndpont;
            }
            var config = new AmazonS3Config {
                ServiceURL = @"http://s3.amazonaws.com"
            };

            client = new AmazonS3Client(accessKey, secretAccessKey, config);
            result = new OperationResult {
                IsSuccess = true
            };
            return(result);
        }
        public static S3DeveloperOptions Parse(string devOptions)
        {
            var options = new S3DeveloperOptions();

            if (string.IsNullOrWhiteSpace(devOptions)) return options;
            var optionPairs = devOptions.Split(new[] { '&' }, StringSplitOptions.RemoveEmptyEntries);
            foreach (var optionPair in optionPairs)
            {
                var optionPairParts = optionPair.Split(new[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                if (optionPairParts.Length == 2)
                {
                    MapToOption(options, optionPairParts[0].Trim().ToLowerInvariant(), optionPairParts[1].Trim());
                }
                else
                {
                    throw new ArgumentException(
                        string.Format(
                            "Unable to parse developer options which should be in the form of 'option=value&nextOption=nextValue'. The option '{0}' was not properly constructed",
                            optionPair));
                }
            }
            return options;
        }
Example #7
0
        private static OperationResult ParseDevOptions(string developerOptions, out S3DeveloperOptions devOptions)
        {
            devOptions = null;
            var result = new OperationResult {
                IsSuccess = false
            };
            var progress = "";

            try
            {
                progress  += "Parsing developer options...\n";
                devOptions = S3DeveloperOptions.Parse(developerOptions);
            }
            catch (ArgumentException e)
            {
                result.EndUserMessage = e.Message;
                return(result);
            }

            result.IsSuccess      = true;
            result.EndUserMessage = progress;
            return(result);
        }
        private OperationResult EstablishClient(AddonManifest manifest, S3DeveloperOptions devOptions, out AmazonS3Client client)
        {
            OperationResult result;

            bool requireCreds;
            var manifestprops = manifest.GetProperties().ToDictionary(x => x.Key, x => x.Value);
            var accessKey = manifestprops["AWSClientKey"];
            var secretAccessKey = manifestprops["AWSSecretKey"];

            var prop =
                manifest.Properties.First(
                    p => p.Key.Equals("requireDevCredentials", StringComparison.InvariantCultureIgnoreCase));

            if (bool.TryParse(prop.Value, out requireCreds) && requireCreds)
            {
                if (!ValidateDevCreds(devOptions))
                {
                    client = null;
                    result = new OperationResult
                    {
                        IsSuccess = false,
                        EndUserMessage =
                            "The add on requires that developer credentials are specified but none were provided."
                    };
                    return result;
                }

                //accessKey = devOptions.AccessKey;
                //secretAccessKey = devOptions.SecretAccessKey;
                //regionEndpoint = devOptions.RegionEndpont;
            }
            var config = new AmazonS3Config { ServiceURL = @"http://s3.amazonaws.com" };
            client = new AmazonS3Client(accessKey, secretAccessKey, config);
            result = new OperationResult { IsSuccess = true };
            return result;
        }
 private static bool ValidateDevCreds(S3DeveloperOptions devOptions)
 {
     return !(string.IsNullOrWhiteSpace(devOptions.AccessKey) || string.IsNullOrWhiteSpace(devOptions.SecretAccessKey));
 }
        private static OperationResult ParseDevOptions(string developerOptions, out S3DeveloperOptions devOptions)
        {
            devOptions = null;
            var result = new OperationResult { IsSuccess = false };
            var progress = "";

            try
            {
                progress += "Parsing developer options...\n";
                devOptions = S3DeveloperOptions.Parse(developerOptions);
            }
            catch (ArgumentException e)
            {
                result.EndUserMessage = e.Message;
                return result;
            }

            result.IsSuccess = true;
            result.EndUserMessage = progress;
            return result;
        }
Example #11
0
        // Provision RDS Instance
        // Input: AddonDeprovisionRequest request
        // Output: ProvisionAddOnResult
        public override ProvisionAddOnResult Provision(AddonProvisionRequest request)
        {
            var provisionResult = new ProvisionAddOnResult("")
            {
                IsSuccess = false
            };
            var manifest         = request.Manifest;
            var developerOptions = request.DeveloperOptions;

            try
            {
                AmazonS3Client     client;
                S3DeveloperOptions devOptions;

                var parseOptionsResult = ParseDevOptions(developerOptions, out devOptions);
                if (!parseOptionsResult.IsSuccess)
                {
                    provisionResult.EndUserMessage = parseOptionsResult.EndUserMessage;
                    return(provisionResult);
                }

                var establishClientResult = EstablishClient(manifest, S3DeveloperOptions.Parse(developerOptions), out client);
                if (!establishClientResult.IsSuccess)
                {
                    provisionResult.EndUserMessage = establishClientResult.EndUserMessage;
                    return(provisionResult);
                }

                var response = client.PutBucket(new PutBucketRequest
                {
                    BucketName   = devOptions.BucketName,
                    BucketRegion = S3Region.US
                });

                if (response.HttpStatusCode != HttpStatusCode.OK)
                {
                    provisionResult.EndUserMessage = response.HttpStatusCode.ToString();
                    return(provisionResult);
                }

                var verificationResponse = client.ListBuckets(new ListBucketsRequest());

                var bucket = verificationResponse.Buckets.Find(m => m.BucketName.Equals(devOptions.BucketName));

                if (bucket == null)
                {
                    provisionResult.EndUserMessage = "We aren't getting the bucket filtered here correctly.";
                    return(provisionResult);
                }

                provisionResult.ConnectionData = "BucketName=" + devOptions.BucketName;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.StackTrace);
                Log.Error(e.Message + "\n" + e.StackTrace);
                provisionResult.EndUserMessage = e.Message + "\n" + e.StackTrace;
            }

            provisionResult.IsSuccess = true;
            return(provisionResult);
        }
Example #12
0
 private static bool ValidateDevCreds(S3DeveloperOptions devOptions)
 {
     return(!(string.IsNullOrWhiteSpace(devOptions.AccessKey) || string.IsNullOrWhiteSpace(devOptions.SecretAccessKey)));
 }