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); }
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)); }
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)); }
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; }
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; }
// 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); }
private static bool ValidateDevCreds(S3DeveloperOptions devOptions) { return(!(string.IsNullOrWhiteSpace(devOptions.AccessKey) || string.IsNullOrWhiteSpace(devOptions.SecretAccessKey))); }