Example #1
0
        public void CommonSetUp()
        {
            var privateKey = Encoding.UTF8.GetString(Convert.FromBase64String("LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlDWEFJQkFBS0JnUUNxR0t1a08xRGU3emhaajYrSDBxdGpUa1Z4d1RDcHZLZTRlQ1owRlBxcmkwY2IySlpmWEovRGdZU0Y2dlVwCndtSkc4d1ZRWktqZUdjakRPTDVVbHN1dXNGbmNDeldCUTdSS05VU2VzbVFSTVNHa1ZiMS8zaitza1o2VXRXKzV1MDlsSE5zajZ0UTUKMXMxU1ByQ0JrZWRiTmYwVHAwR2JNSkR5UjRlOVQwNFpad0lEQVFBQkFvR0FGaWprbzU2K3FHeU44TTBSVnlhUkFYeisreFRxSEJMaAozdHg0VmdNdHJRK1dFZ0NqaG9Ud28yM0tNQkF1SkdTWW5SbW9CWk0zbE1mVEtldklrQWlkUEV4dllDZG01ZFlxM1hUb0xra0x2NUwyCnBJSVZPRk1ERytLRVNuQUZWN2wyYytjbnpSTVcwK2I2ZjhtUjFDSnpadXhWTEw2UTAyZnZMaTU1L21iU1l4RUNRUURlQXc2ZmlJUVgKR3VrQkk0ZU1aWnQ0bnNjeTJvMTJLeVluZXIzVnBvZUUrTnAycStaM3B2QU1kL2FOelEvVzlXYUkrTlJmY3hVSnJtZlB3SUdtNjNpbApBa0VBeENMNUhRYjJiUXI0QnlvcmNNV20vaEVQMk1aelJPVjczeUY0MWhQc1JDOW02NktyaGVPOUhQVEp1bzMvOXM1cCtzcUd4T2xGCkwwTkR0NFNrb3NqZ0d3SkFGa2x5UjF1Wi93UEpqajYxMWNkQmN6dGxQZHFveHNzUUduaDg1QnpDai91M1dxQnBFMnZqdnl5dnlJNWsKWDZ6azdTMGxqS3R0MmpueTIrMDBWc0JlclFKQkFKR0MxTWc1T3lkbzVOd0Q2QmlST3JQeEdvMmJwVGJ1L2ZoclQ4ZWJIa1R6MmVwbApVOVZRUVNRelkxb1pNVlg4aTFtNVdVVExQejJ5TEpJQlFWZFhxaE1DUUJHb2l1U29TamFmVWhWN2kxY0VHcGI4OGg1TkJZWnpXWEdaCjM3c0o1UXNXK3NKeW9OZGUzeEg4dmRYaHpVN2VUODJENlgvc2N3OVJaeisvNnJDSjRwMD0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0="));
            var cf         = new AmazonCloudFrontClient(RegionEndpoint.EUNorth1);

            _urlSigner = new UrlSigner(cf, privateKey, "ABCD3FGH1JKLM");
        }
        public override void Invoke(AWSCredentials creds, RegionEndpoint region, int maxItems)
        {
            AmazonCloudFrontConfig config = new AmazonCloudFrontConfig();

            config.RegionEndpoint = region;
            ConfigureClient(config);
            AmazonCloudFrontClient client = new AmazonCloudFrontClient(creds, config);

            ListStreamingDistributionsResponse resp = new ListStreamingDistributionsResponse();

            do
            {
                ListStreamingDistributionsRequest req = new ListStreamingDistributionsRequest
                {
                    Marker = resp.StreamingDistributionListNextMarker
                    ,
                    MaxItems = maxItems
                };

                resp = client.ListStreamingDistributions(req);
                CheckError(resp.HttpStatusCode, "200");

                foreach (var obj in resp.StreamingDistributionListItems)
                {
                    AddObject(obj);
                }
            }while (!string.IsNullOrEmpty(resp.StreamingDistributionListNextMarker));
        }
        /// <summary>
        /// Allow only few updations to cloudfront like SSL
        /// </summary>
        /// <param name="distributionId"></param>
        /// <param name="etag"></param>
        /// <returns></returns>
        public static UpdateDistributionResponse UpdateCloudFront(string distributionId, string etag, ViewerCertificate viewerCertificate = null)
        {
            try
            {
                if (String.IsNullOrEmpty(distributionId) || String.IsNullOrEmpty(etag))
                {
                    return(null);
                }

                var client = new AmazonCloudFrontClient(RegionEndpoint.APSouth1);

                var request = new UpdateDistributionRequest()
                {
                    Id                 = distributionId,
                    IfMatch            = etag,
                    DistributionConfig = new DistributionConfig()
                    {
                    }
                };

                if (viewerCertificate != null)
                {
                    request.DistributionConfig.ViewerCertificate = viewerCertificate;
                }

                return(client.UpdateDistributionAsync(request).Result);
            }
            catch (Exception ex)
            {
                //TODO - log the exception
            }
            return(null);
        }
Example #4
0
        public S3Util(string key, string secret, string region)
        {
            _s3client = new AmazonS3Client(key, secret,
                                           RegionEndpoint.GetBySystemName(region));

            _cfclient = new AmazonCloudFrontClient(key, secret,
                                                   RegionEndpoint.GetBySystemName(region));
        }
Example #5
0
        private static void UploadWeb()
        {
            var path = "../../../Web/";

            try
            {
                var m = Directory.GetFiles(path);
                Console.WriteLine("Starting Web Upload");
                TransferUtility directoryTransferUtility = new TransferUtility(new AmazonS3Client(Amazon.RegionEndpoint.USWest2), new TransferUtilityConfig()
                {
                    ConcurrentServiceRequests = 50,
                });
                var transferUtilityUploadDirectoryRequest = new TransferUtilityUploadDirectoryRequest()
                {
                    Directory               = path,
                    BucketName              = "socialwargames.com",
                    SearchPattern           = "*.*",
                    SearchOption            = SearchOption.AllDirectories,
                    UploadFilesConcurrently = true,
                    CannedACL               = S3CannedACL.PublicRead
                };
                transferUtilityUploadDirectoryRequest.UploadDirectoryProgressEvent += (sender, e) =>
                {
                    Console.WriteLine("Files Uploaded: " + e.NumberOfFilesUploaded);
                };



                directoryTransferUtility.UploadDirectory(transferUtilityUploadDirectoryRequest);
                Console.WriteLine("Starting Invalidate");


                AmazonCloudFrontClient    oClient  = new AmazonCloudFrontClient(Amazon.RegionEndpoint.USWest2);
                CreateInvalidationRequest oRequest = new CreateInvalidationRequest();
                oRequest.DistributionId    = "E34LW6CB5ZCWQU";
                oRequest.InvalidationBatch = new InvalidationBatch
                {
                    CallerReference = DateTime.Now.Ticks.ToString(),
                    Paths           = new Paths()
                    {
                        Items = new List <string>()
                        {
                            "/*"
                        }, Quantity = 1
                    }
                };

                CreateInvalidationResponse oResponse = oClient.CreateInvalidation(oRequest);
                oClient.Dispose();
                Console.WriteLine("Done Web Upload");
            }

            catch (AmazonS3Exception e)
            {
                Console.WriteLine(e.Message, e.InnerException);
            }
        }
        /// <summary>
        /// Default constructor. This constructor is used by Lambda to construct the instance. When invoked in a Lambda environment
        /// the AWS credentials will come from the IAM role associated with the function and the AWS region will be set to the
        /// region the Lambda function is executed in.
        /// </summary>
        public Function()
        {
            S3Client = new AmazonS3Client();

            distribuitionCloudFrontId = Environment.GetEnvironmentVariable("CloudFrontDistribution");
            if (!string.IsNullOrWhiteSpace(distribuitionCloudFrontId))
            {
                cfClient = new AmazonCloudFrontClient();
            }
        }
Example #7
0
        public static string AddDomainToDistribution(string AWSAccesKey, string AWSSecretKey, string distributionId, string domainName)
        {
            try
            {
                if (String.IsNullOrEmpty(distributionId))
                {
                    throw new Exception("distributionId cannot be null");
                }
                if (String.IsNullOrEmpty(domainName))
                {
                    throw new Exception("domain name cannnot be null");
                }

                domainName = domainName.Trim(' ');
                domainName = domainName.ToLower();

                using (AmazonCloudFrontClient cfClient = new AmazonCloudFrontClient(AWSAccesKey, AWSSecretKey, RegionEndpoint.APSouth1))
                {
                    GetDistributionConfigRequest distributionConfig = new GetDistributionConfigRequest
                    {
                        Id = distributionId
                    };
                    var config = cfClient.GetDistributionConfigAsync(distributionConfig).Result;

                    //  Set a new config
                    DistributionConfig newConfig = config.DistributionConfig;
                    if (newConfig.Aliases.Items.Contains(domainName))
                    {
                        return("already present");
                    }
                    newConfig.Aliases.Items.Add(domainName);
                    newConfig.Aliases.Quantity += 1;

                    //  Update
                    UpdateDistributionRequest req = new UpdateDistributionRequest
                    {
                        Id                 = distributionId,
                        IfMatch            = config.ETag,
                        DistributionConfig = newConfig
                    };

                    var response = cfClient.UpdateDistributionAsync(req).Result;
                }

                return("success");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        protected IAmazonCloudFront CreateClient(AWSCredentials credentials, RegionEndpoint region)
        {
            var config = new AmazonCloudFrontConfig {
                RegionEndpoint = region
            };

            Amazon.PowerShell.Utils.Common.PopulateConfig(this, config);
            this.CustomizeClientConfig(config);
            var client = new AmazonCloudFrontClient(credentials, config);

            client.BeforeRequestEvent += RequestEventHandler;
            client.AfterResponseEvent += ResponseEventHandler;
            return(client);
        }
        /// <summary>
        /// Config is required while updating a Distribution
        /// </summary>
        /// <param name="distributionId"></param>
        /// <returns></returns>
        public static GetDistributionConfigResponse GetDistributionConfigResponse(string distributionId)
        {
            try
            {
                if (String.IsNullOrEmpty(distributionId))
                {
                    return(null);
                }

                var client = new AmazonCloudFrontClient(RegionEndpoint.APSouth1);

                var request = new GetDistributionConfigRequest()
                {
                    Id = distributionId
                };

                return(client.GetDistributionConfigAsync(request).Result);
            }
            catch (Exception ex)
            {
                //TODO - log the exception
            }
            return(null);
        }
        /// <summary>
        /// Invalidates objects from a CloudFront distribution.
        /// </summary>
        /// <param name="distributionId">The distribution to invalidate objects from.</param>
        /// <param name="items">The path of the objects to invalidate.</param>
        /// <param name="reference">A unique name that ensures the request can't be replayed.</param>
        /// <param name="settings">The <see cref="CloudFrontSettings"/> required to connect to Amazon CloudFront.</param>
        /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
        public async Task <string> CreateInvalidation(string distributionId, IList <string> items, string reference, CloudFrontSettings settings, CancellationToken cancellationToken = default(CancellationToken))
        {
            //Get Reference
            if (String.IsNullOrEmpty(reference))
            {
                reference = DateTime.Now.Ticks.ToString();
            }



            //Correct Paths
            List <string> paths = new List <string>();

            foreach (string item in items)
            {
                if (!item.StartsWith("/"))
                {
                    paths.Add("/" + item);
                }
                else
                {
                    paths.Add(item);
                }
            }



            //Create Request
            InvalidationBatch batch = new InvalidationBatch()
            {
                Paths = new Paths()
                {
                    Items    = paths.ToList(),
                    Quantity = items.Count
                },

                CallerReference = reference
            };

            CreateInvalidationRequest request = new CreateInvalidationRequest()
            {
                DistributionId    = distributionId,
                InvalidationBatch = batch
            };



            //Send Request
            _Log.Verbose("Create Invalidation {0}", distributionId);

            AmazonCloudFrontClient client = this.GetClient(settings);

            CreateInvalidationResponse response = await client.CreateInvalidationAsync(request);

            if (response.HttpStatusCode == System.Net.HttpStatusCode.Created)
            {
                return(response.Invalidation.Id);
            }
            else
            {
                _Log.Error("Error invalidating object {0}", distributionId);

                return("");
            }
        }
Example #11
0
        public CloudFrontMain(BasicAWSCredentials credentials, string awsregion)
        {
            RegionEndpoint region = RegionEndpoint.GetBySystemName(awsregion);

            _Client = new AmazonCloudFrontClient(credentials, region);
        }
 public AWSCloudFrontAPI(AWSCloudFrontOptions awsCloudFrontOptions)
 {
     this.awsCloudFrontOptions = awsCloudFrontOptions;
     basicAWSCredentials       = new BasicAWSCredentials(awsCloudFrontOptions.Key, awsCloudFrontOptions.Secret);
     amazonCloudFrontClient    = new AmazonCloudFrontClient(basicAWSCredentials, RegionEndpoint.GetBySystemName(awsCloudFrontOptions.Region));
 }
        /// <summary>
        /// TODO: change OriginProtocolPolicy to matchViewer
        /// Save complete request and response in logCollection
        /// </summary>
        /// <param name="customerId"></param>
        public static CreateDistributionWithTagsResponse CreateCloudFront(string customerId, string domainName)
        {
            try
            {
                var client = new AmazonCloudFrontClient(RegionEndpoint.APSouth1);

                DistributionConfigWithTags distributionConfig = new DistributionConfigWithTags()
                {
                    DistributionConfig = new DistributionConfig()
                    {
                        Aliases = new Aliases()
                        {
                            Items = new List <string>()
                            {
                                domainName
                            },
                            Quantity = 1
                        },
                        Comment = customerId,
                        Enabled = true,
                        Logging = new LoggingConfig()
                        {
                            Enabled        = true,
                            Bucket         = CloudFrontLogBucketName,
                            Prefix         = CloudFrontLogBucketPrefixName,
                            IncludeCookies = false
                        },
                        DefaultCacheBehavior = new DefaultCacheBehavior()
                        {
                            TargetOriginId = KitsuneLoadBalancerOriginId,
                            AllowedMethods = new AllowedMethods()
                            {
                                Items = new List <string>()
                                {
                                    "GET", "HEAD", "OPTIONS", "PUT", "POST", "PATCH", "DELETE"
                                },
                                Quantity = 7
                            },
                            Compress             = false,
                            DefaultTTL           = 86400,
                            MaxTTL               = 259200,
                            MinTTL               = 86400,
                            ViewerProtocolPolicy = new ViewerProtocolPolicy("allow-all"),
                            ForwardedValues      = new ForwardedValues()
                            {
                                Headers = new Headers()
                                {
                                    Items = new List <string>()
                                    {
                                        "CloudFront-Forwarded-Proto", "CloudFront-Is-Desktop-Viewer", "CloudFront-Is-Mobile-Viewer",
                                        "CloudFront-Viewer-Country", "Host", "Origin", "Referer"
                                    },
                                    Quantity = 7
                                },
                                QueryString = true,
                                Cookies     = new CookiePreference()
                                {
                                    Forward = new ItemSelection("all")
                                }
                            },
                            TrustedSigners = new TrustedSigners()
                            {
                                Enabled     = false, Items = new List <string>()
                                {
                                }, Quantity = 0
                            }
                        },
                        Origins = new Origins()
                        {
                            Items = new List <Origin>()
                            {
                                new Origin()
                                {
                                    CustomOriginConfig = new CustomOriginConfig()
                                    {
                                        HTTPPort  = 80,
                                        HTTPSPort = 443,
                                        OriginKeepaliveTimeout = 5,
                                        OriginReadTimeout      = 30,
                                        OriginProtocolPolicy   = OriginProtocolPolicy.HttpOnly,
                                        OriginSslProtocols     = new OriginSslProtocols()
                                        {
                                            Items = new List <string>()
                                            {
                                                "TLSv1", "TLSv1.1", "TLSv1.2"
                                            },
                                            Quantity = 3
                                        }
                                    },
                                    DomainName = KitsuneLoadBalancerAliasId,
                                    Id         = KitsuneLoadBalancerOriginId
                                }
                            },
                            Quantity = 1
                        },
                        CallerReference = DateTime.Now.ToString()
                    },
                    Tags = new Tags()
                    {
                        Items = new List <Tag>()
                        {
                            new Tag()
                            {
                                Key = "KITSUNE-CUSTOMERID", Value = customerId
                            }
                        }
                    }
                };

                var request = new CreateDistributionWithTagsRequest()
                {
                    DistributionConfigWithTags = distributionConfig
                };
                return(client.CreateDistributionWithTagsAsync(request).Result);
            }
            catch (Exception ex)
            {
                //TODO - log exception
            }
            return(null);
        }